首页 > 代码库 > leetcode 374

leetcode 374

这个题目很简单,但是要注意细节和对题目的理解,一开始我把guess函数的作用理解错了,第一版代码长这样:

 1 int guessNumber(int n) 2 { 3     int low = 1; 4     int high = n; 5  6     while(low < high) 7     { 8         int mid = (high + low) / 2; 9         int g = guess(mid);10         if(g == 0)11             return mid;12         else if(g > 0)13             low = mid + 1;14         else15             high = mid - 1;16     }17 18     return low;19 20 }

在重新读了几次题目之后,第二版代码长这样:

 1 int guessNumber(int n) 2 { 3     int low = 1; 4     int high = n; 5  6     while(low < high) 7     { 8         int mid = (high + low) / 2; 9         int g = guess(mid);10         if(g == 0)11             return mid;12         else if(g < 0)13             low = mid + 1;14         else15             high = mid - 1;16     }17 18     return low;19 20 }

但是还是不能正确通过,这很尴尬:查了半天发现是上面标注的那段代码有问题,我一直以为把代码写成最简单的数学表达式是一个好选择,但是这里显然不是这样:因为这样当high和low都比较大时,这是会导致溢出!所以有了第三个版本的代码:

int guessNumber(int n){    int low = 1;    int high = n;    while(low < high)    {        int mid = low + (high - low) / 2;        int g = guess(mid);        if(g == 0)            return mid;        else if(g < 0)            low = mid + 1;        else            high = mid - 1;    }    return low;}

 

leetcode 374