leetcode374
题目简介
我从 1 到 n 选择一个数字。 你需要猜我选择了哪个数字。
你调用一个预先定义好的接口 guess(int num),它会返回 3 个可能的结果(-1,1 或 0):
-1 : 我的数字比较小
1 : 我的数字比较大
0 : 恭喜!你猜对了!
题目思想
我们用二分法查找,每次都找中间值进行对比即可(PS:这很简单,但是我掉坑了,拿来记录一下)
当你使用int类型时可能输入的low和high都在范围内,但是low+high未必在int的范围内,因此我们对于mid的改变需要用减法来加从
mid=(low+high)/2->mid=low+(high-low)/2
减法能让这个范围变小,而不是在计算过程中可能会超出范围
AC代码
class Solution {
public:
int guessNumber(int n) {
int res,low=1,high=n,w;
while(low<=high){
res=low+(high-low)/2;
w=guess(res);
if(w==0){
return res;
}
else if(w==-1){
high=res-1;
}
else{
low=res+1;
}
}
return -1;
}
};