初始条件:
left = 0
right = arrar.length-1
终止:left > right
向左查找:right = mid-1
向右查找:left = mid+1
var search = function(nums, target) {
left = 0; // 初始左边界
right = nums.length - 1; // 初始右边界
while (left <= right) {
let mid = left + Math.floor((right - left) / 2); //防止溢出
if (nums[mid] < target) {
// 收缩左边界
left = mid + 1;
} else if (nums[mid] > target) {
// 收缩右边界
right = mid - 1;
} else {
return mid; // 找到了当前值
}
}
return -1;
};
二维方向的二分法:
注意点:一个方向取最小值,另一个方向取最大值,否则无法确定二分的方向。
function Find(target, array)
{
maxi=array.length
maxj=array[0].length
i=0
j=maxj-1
while(i<maxi&&j>=0){
if(target==array[i][j])return true
else if(target>array[i][j])i++
else j--
}
return false
}