374. Guess Number Higher or Lower
We are playing the Guess Game. The game is as follows:
I pick a number from 1 to n. You have to guess which number I picked.
Every time you guess wrong, I’ll tell you whether the number is higher or lower.
You call a pre-defined API guess(int num)
which returns 3 possible results (-1, 1, or 0)
:
-1 : My number is lower
1 : My number is higher
0 : Congrats! You got it!
Example:
n = 10, I pick 6.
Return 6.
这道题就是一道简单的二分查找,本身是没有什么难度的,但是却被这道题卡了很久,原因是它提供的API的说明实在是充满了歧义。
My number is lower
中的My到底是作为解题人的“我”提供的数据小了呢?还是题目作为游戏发起人的”我”提供的数字小了?
第一次提交是按照第一种方式理解的,结果出现了错误,让我感到很不可思议,因为仔细检查过后发现二分查找算法本身应该是没有问题的,后来我尝试互换了中间值大于目标值和中间值小于目标值 两种情况下对low,high指针的处理,获得了Accept。
所以,由此可见,提供准确而无歧义的API文档是多么重要。
代码如下:
// Forward declaration of guess API.
// @param num, your guess
// @return -1 if my number is lower, 1 if my number is higher, otherwise return 0
int guess(int num);
class Solution {
public:
int guessNumber(int n) {
long long int low=1,high=n,mid=0;
while(low<=high){
mid=low+((high-low)>>1);
if(guess(mid)==0)
return mid;
else if(guess(mid)==1)
low=mid+1;
else
high=mid-1;
}
return -1;
}
};