二分法总结
关于左边界:
当目标元素 target 不存在数组 nums 中时,搜索左侧边界的二分搜索的返回值可以做以下几种解读:
1、返回的这个值是 nums 中大于等于 target 的最小元素索引。
2、返回的这个值是 target 应该插入在 nums 中的索引位置。
3、返回的这个值是 nums 中小于 target 的元素个数。
比如在有序数组 nums = [2,3,5,7] 中搜索 target = 4,搜索左边界的二分算法会返回 2,你带入上面的说法,都是对的。
// 寻找左边界
var leftbound = function(nums, target) {
var left = 0;
var right = nums.length - 1;
while(left <= right) {
var mid = Math.floor(left+(right-left)/2);
if(nums[mid] === target) {
right= mid - 1;
}else if(nums[mid] > target) {
right = mid - 1;
}else if(nums[mid] < target) {
left = mid + 1;
}
}
if(left < 0 || left >= nums.length) {
return -1;
}
return nums[left] === target ? left : -1;
}
// 寻找右边界
var rightbound = function(nums, target) {
var left = 0;
var right = nums.length - 1;
while(left <= right) {
var mid = Math.floor(left+(right-left)/2);
if(nums[mid] === target) {
left = mid + 1;
}else if(nums[mid] > target) {
right = mid - 1;
}else if(nums[mid] < target) {
left = mid + 1;
}
}
if(right < 0 || right >= nums.length) {
return -1;
}
return nums[right] === target ? right : -1;
}

浙公网安备 33010602011771号