题解
二分法
left和right标记二分区间
ans标记n,因为存在大于所有数的可能。
var searchInsert = function(nums, target) {
const n = nums.length;
let left = 0, right = n - 1, ans = n;
while (left <= right) {
//计算中位数
let mid = ((right - left) >> 1) + left;
if (target <= nums[mid]) {
ans = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
return ans;
};
代码解释
let mid = ((right - left) >> 1) + left;
为什么算中位数用这种方式,有什么好处?
- 防止溢出:它避免了 (left + right) / 2 可能产生的整型溢出。
- 效率较高:位运算在某些编译器和处理器上可能比标准除法更快。