//非遞減數列,[left, right] 閉區間,最後left一定會等於right
while(left < right) {//區間只剩1個元素時終止,此時left=right
int mid = left + ((right - left) >> 1);//防止溢出,沒有+1,mid偏左
if(target > nums[mid]) {
left = mid + 1;//因爲mid已經偏左,left+1可防止死循環
}
else {//包含“相等”的條件在裏面,不單獨列出“相等”是因爲比較操作會耗時,二分搜索(而不是三分四分)只需一個比較操作
right = mid;
}
}
//nums[right] >= target,right是第一個大於等於target的數
//非遞減數列,[left, right] 閉區間,最後left一定會等於right
while(left < right) {//區間只剩1個元素時終止,此時left=right
int mid = left + ((right - left + 1) >> 1);//防止溢出,存在+1,mid偏右
if(target < nums[mid]) {
right = mid - 1;//因爲mid已經偏右,right-1可防止死循環
}
else {//包含“相等”的條件在裏面,不單獨列出“相等”是因爲比較操作會耗時,二分搜索(而不是三分四分)只需一個比較操作
left = mid;
}
}
//nums[left] <= target,left是最後一個小於等於target的數