35.搜索插入位置
给定一个有序数组和一个目标值,当找到目标值时返回其下标。否则,返回目标值按顺序插入数组时的下标。
你可以假定数组没有重复元素。
Example 1:
Input: [1,3,5,6], 5
Output: 2
Example 2:
Input: [1,3,5,6], 2
Output: 1
Example 3:
Input: [1,3,5,6], 7
Output: 4
Example 4:
Input: [1,3,5,6], 0
Output: 0
解法1:
题目没有说明数组是正序抑或者是倒序,但是跑了几个测试用例发现输出都是倒序,所有此处忽略数组倒序排列的情况。利用二分法,值得注意的是计算mid的时候为了防止溢出,用 max - (max - min) / 2
代替 (max + min) /2
。代码实现:
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var searchInsert = function(nums, target) {
// empty array
if (!nums.length) return 0;
let min = 0;
let max = nums.length - 1;
while (min <= max) {
if (target <= nums[min]) {
return min;
}
if (target > nums[max]) {
return ++max;
}
// 防止(max + min)溢出
let mid = parseInt(max - (max - min) / 2);
if (target <= nums[mid]) {
max = mid - 1;
} else {
min = mid + 1;
}
}
};