求二分的几种写法

灌水区

Dream__Sky @ 2023-07-31 22:39:53

rt 经常搞错 谢谢


by DE_aemmprty @ 2023-07-31 22:42:28

我是比较保守的,如:

int l = 0, r = 1e9, ans = -1;
while (l <= r) {
    int mid = l + r >> 1;
   if (check(mid)) {
       ans = mid;
       ...
   }
   else ...
}

一般不会错,用了很久了


by ACRUSHj @ 2023-07-31 22:46:26

@Dream__Sky 我是:

int mid=l+r>>1;
if(check(mid))l=mid+1;
else r=mid;

在左端点右移时选择mid+1不会死循环


by ACRUSHj @ 2023-07-31 22:47:57

@ACRUSHj 当然为了写成这样可能还要把二分对象倒过来,如此

写的时候偶尔会纠结(


by qi__ @ 2023-08-01 07:13:16

楼上正解


|