题目
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
我的代码
var searchInsert = function(nums, target) {
for(var i = 0;i< nums.length;i++){
if(nums[i]<target){
continue;
}else {
return i;
}
}
return nums.length
};
PS:太尴尬了……好不容易感觉自己做的挺快哈哈,结果耗时……😂
特别尴尬的是,我第一反应是用二分法,但是却写不出代码来 ̄□ ̄||
他人代码
var searchInsert = function(nums, target){
var n = nums.length;
var left = 0, right = n - 1, ans = n;
while(left <= right){
var mid = ((right - left)>>1 )+ left;
if(target <= nums[mid]){
ans = mid;
right = mid - 1;
}else{
left = mid + 1;
}
}
return ans;
}
PS :
- “>>”这个运算符是右移位,右移1位就是除以2
- 因为要记录插入的位置(坐标),所以需要把mid值赋给要return的变量
- 思路:先设定left和right的位置为收尾坐标,再计算中间下标。每次计算nums[mid]的值与target相比,如果小于就把right移到mid-1,如果大于就把left移到mid+1