两种方法
先说左闭右闭区间,当循环跳出的上一步时(假设无目标值),此时left==right,最后一次进入循环,等于直接返回,小于目标值移动left,大于目标值则移动right,此时left所指的位置都是要插入的目标位置
//使用左闭右闭区间
let left=0;
let right=nums.length-1;
while(left<=right){
let mid=Math.floor((left+right)/2);
if(nums[mid]==target){
return mid;
}else if(nums[mid]<target){
left=mid+1;
}else{
right=mid-1;
}
}
return left
第二种,左闭右开区间
//使用左闭右开区间
let left=0;
let right=nums.length;
while(left<right){
let mid=Math.floor((left+right)/2);
if(nums[mid]==target){
return mid;
}else if(nums[mid]<target){
left=mid+1;
}else{
right=mid;
}
}
return left
跳出循环的前一步就是left==right-1,此时区间内只要一个元素即left指向的元素,若小于目标值移动left+1,大于目标值left不变