使用Binary Search查找最后一个元素<= target

时间:2019-05-27 09:56:27

标签: c++ binary-search invariants

我想使用二进制搜索在我的排序数组中找到最后一个元素(打印索引)<=target

我已经为此编写了一个代码,并且设置了一个不变式,所以我想知道那是我的代码O(log n),还有什么需要修改的地方吗?

代码:

int l=0,r=n;
while(r-l>1){
    int mid=l+(r-l)/2;
    if(a[mid]<=target){
        l=mid;
    }else r=mid;
}if(a[l]>target)return -1;
else return l;
  

Invariant ==>如果有任何结果,则结果在[l,r)范围内。

     

如果r和l之间的距离为1,则表示我们已经找到   由于我们的不变性,结果(l)不能为r。   因此,直到(r-l)> 1,我们必须继续循环。

我正确吗?还是需要在代码中涵盖一些极端情况?

另一个问题:

target(==target)的第一个等于元素的不变性是什么?target(==target)的最后一个等于元素的不变性是什么?如果可以的话,请为二进制搜索的变体编写不变量和代码。

0 个答案:

没有答案