说到二分,发现自己一直搞不太清该返回什么,但总的板子还挺清楚
int l=0,r=k,mid; while(l<=r) { mid=(l+r)/2; if(check(mid))l=mid+1; else r=mid-1; }那到底该返回什么呢?询问神犇ltr后大概得知,如果按我上面的打法,一般返回左右端点,因为如果返回mid而最后一次判断为false,则mid并不符合,而最后的l=r+1;所以返回l-1或r都是对的。
再做点题补补坑吧。
说到二分,发现自己一直搞不太清该返回什么,但总的板子还挺清楚
int l=0,r=k,mid; while(l<=r) { mid=(l+r)/2; if(check(mid))l=mid+1; else r=mid-1; }那到底该返回什么呢?询问神犇ltr后大概得知,如果按我上面的打法,一般返回左右端点,因为如果返回mid而最后一次判断为false,则mid并不符合,而最后的l=r+1;所以返回l-1或r都是对的。
再做点题补补坑吧。