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;
    }
};

北邮教务系统评教脚本

Published on September 17, 2017

72.Edit distance

Published on September 17, 2017