LeetCode 374:两种猜数字解法的差异困惑求解答
LeetCode 374 猜数字问题:两种解法的差异解析
首先明确LeetCode 374中guess()函数的返回值定义:
- 返回
-1:你猜的数字大于目标数字,需要缩小上界,往更小的范围查找 - 返回
1:你猜的数字小于目标数字,需要扩大下界,往更大的范围查找 - 返回
0:猜对了,直接返回当前数字
错误解法的核心问题
错误解法完全搞反了guess()返回值对应的区间调整逻辑:
int l = 1; int h = n; while(l<=h){ int mid = l+(h-l)/2; // 当guess返回-1,说明mid > 目标,应该把上界h设为mid-1,缩小到左半区 if (guess(mid) == -1){ l = mid+1; // 错误:反而扩大下界,往更大数字查找,逻辑彻底颠倒 } // 当guess返回1,说明mid < 目标,应该把下界l设为mid+1,扩大到右半区 else if (guess(mid) == 1){ h = mid-1; // 错误:反而缩小上界,往更小数字查找,完全南辕北辙 } else if (guess(mid) == 0){ return mid; } } return l;
这种逻辑错误会导致查找区间完全偏离目标,无法定位到正确数字,甚至提前跳出循环返回错误结果。
正确解法的逻辑正确性
正确解法严格遵循guess()返回值的定义调整查找区间:
int low = 1; int high = n; while(low<=high){ int mid = low+(high-low)/2; if(guess(mid)==0){ return mid; } // guess返回1,说明mid < 目标,去右半区查找,更新下界 else if(guess(mid)==1){ low = mid+1; } // 剩余情况为返回-1,说明mid > 目标,去左半区查找,更新上界 else{ high = mid-1; } } return low;
每一步的区间调整都和guess()的提示匹配,能逐步缩小范围,最终精准定位到目标数字。
内容的提问来源于stack exchange,提问作者Marcus Mousavi
相关产品推荐
相关产品推荐

