dalao 请看:
在我看完题解第一次做的时候我选择的区间是
(mid+1,high) 和(low,mid-1),但是这是错误的,正确的是
(mid+1,high)和(low,mid),这个卡了我巨久┭┮﹏┭┮,然后我就在想为什么?相差一个1而已,其实是因为 answer=high-1,因为二分最后都会变成两个 我默认最后 是T F,而它最终会指向F故-1,但是由于我self()接触到 F 后是选择mid-1的,就相当于抛弃了false,可能会造成 T T导致结果相差1 ...
所以,不能抛弃(是不是有点反常理(找true但是不能抛弃false)嗯,我也觉得反常理),然后你在看这个(mid+1,high)是不是歪打正着,把true抛弃了,所以最后也会找到F ,那么最后 两个 是T T 即 answer=high的这种情况可不可行呢?这就要求 (mid,high)保留T对吧,然后....死循环(嘻嘻)所以好像这里结果只有一个...(这道题卡了我挺久的,看别人代码才意识到可能是这里的问题(攥紧小拳拳))
void divide(int low,int high){
if(low==high) {
answer=high-1;
return;
}
int mid=low+(high-low)/2;
//self()是用来判断该数是否满足的
if(self(mid)) divide(mid+1,high);
else divide(low,mid);
}