zoukankan      html  css  js  c++  java
  • 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         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;
    }
  • 相关阅读:
    前端博客收集
    Oracle 数据库性能调优
    vue解决跨域问题
    IIS相关问题及解决方案
    《软件测试工程师》学习笔记
    Matlab学习笔记(一)
    排序算法及分析
    Silverlight学习笔记——跨域调用
    Matlab学习笔记(三)
    C#的一些必备技术
  • 原文地址:https://www.cnblogs.com/maizi-1993/p/5884589.html
Copyright © 2011-2022 走看看