题目描述
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 1:
示例 2:
示例 3:
示例 4:
题解
暴力匹配
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| class Solution { public int searchInsert(int[] nums, int target) { if(nums == null || nums.length == 0){ return 0; }
if(target < nums[0]){ return 0; } if(target == nums[nums.length -1]){ return nums.length-1; } if (target > nums[nums.length - 1]) { return nums.length; }
int index = 0; for (int i = 0; i < nums.length-1; i++) { if(nums[i] == target){ return i; } if ((nums[i] < target && nums[i+1] > target)) { return i+1; } }
return index; } }
|
二分查找
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| class Solution { public int searchInsert(int[] nums, int target) { int low = 0, high = nums.length - 1, mid = 0; while(low <= high) { mid = (low + high) >> 1; if(nums[mid] == target) return mid; else if(nums[mid] > target) high = mid - 1; else low = mid + 1; } return low; } }
|
精选题解
踩坑
实验室一兄弟使用js提交,但是遇到了这样的问题
将let mid = (hi + lo) >> 1;
改为let mid = (hi + lo) / 2;
结果不通过
let mid = (hi + lo) >> 1;
请路过的大佬,能不能解决?欢迎评论/私信我!!!