二分法的一些边界条件

二分法的一些边界条件

今天在做 “力扣 222. 完全二叉树的节点个数”时发现答案的二分法很巧妙,但是我对答案的二分法的一个细微处理不明白,答案在求mid时,使用 mid=(right-left+1)/2+left 而不是 mid=(right-left)/2+left。
这就涉及到二分法的一些技巧。

如果要找到某个target是否存在,并且不关心这个target是否有多个重复值在数组里面,那么

while(left<=right){
    int mid=(right-left)/2+left;
    if(array[mid]==target){
        return mid;
    }
    if(array[mid]>target){
        right=mid-1;
    } else {
        left=mid+1;
    }
}

如果查找某个target第一次出现在数组的位置,那么直接使用

while(left<=right){
    if()
}

未完待续

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注