二分查找
条件:数组必须是有序数组
基础框架:
while(left<=right){
const mid = Math.floor((right-left)/2)
if(nums[mid]==target){
return mid
}else if (nums[mid]>target){
right = mid-1
}else if (nums[mid]<target){
left = mid+1
}
在实际问题中,我们可能会涉及到查找比目标target大的第一个数或比target小的第一个数,这时需要做稍微的调整来让二分法执行有意义的查找例如:
剑指 Offer 53 - I. 在排序数组中查找数字 I
var search = function(nums, target) {
var leftinx
var rightinx
leftinx = binary(target,nums,true)
rightinx = binary(target,nums,false)
return rightinx-leftinx
}
var binary = function(target,nums,x){
var n= nums.length;
var left = 0
var right = nums.length - 1
while(left<=right){
mid =Math.floor((left+right)/2)
if(nums[mid]>target || (x&&nums[mid]>=target)){
right = mid-1
n=mid
}else{
left = mid+1
}
}
return n;
}