码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode 374

时间:2016-09-19 12:58:25      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:

这个题目很简单,但是要注意细节和对题目的理解,一开始我把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         else
15             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         else
15             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

标签:

原文地址:http://www.cnblogs.com/maizi-1993/p/5884589.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!