Open xiannv opened 4 years ago
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var searchInsert = function(nums, target) {
if (nums[0] > target) {
return 0;
} else if (nums[nums.length - 1] < target) {
return nums.length;
}
for(var i=0;i<nums.length;i++){
if(nums[i]>target || nums[i]==target){
return i;
}
}
return nums.length
};
//二分法
var searchInsert = function(nums,target){
const length = nums.length;
if (nums[length - 1] < target) {
return length;
} else if (length === 0) {
return 0;
}
let left = 0;
right = length - 1;
while (left < right) {
let mid = (left + right) >>> 1;
if (target > nums[mid]) {
left = mid + 1;
} else {
right = mid;
}
}
return right;
//原先的(left + right) / 2,如果left和right都很大的情况下,加和可能超过最大安全数,导致结果不精确。
//当然可以改成left + (right - left) / 2,不过如果right很大,而left很小,也会溢出。
//用>>>,不怕溢出,简单快捷,就是可读性差了点。
}
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 1:
输入: [1,3,5,6], 5 输出: 2 示例 2:
输入: [1,3,5,6], 2 输出: 1 示例 3:
输入: [1,3,5,6], 7 输出: 4 示例 4:
输入: [1,3,5,6], 0 输出: 0
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/search-insert-position 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。