【LeetCode-374】Guess Number Higher or Lower(C++)

来源:互联网 发布:淘宝市场行情软件 编辑:程序博客网 时间:2024/06/08 06:06

题目要求:猜数字,如果猜对了guess函数会返回0,如果没有猜对guess函数会告诉你猜大了还是猜小了。直到你猜出这个数并返回。

解题方法:典型的二分查找。

有一个点需要注意:取中间数的时候一定要这么取: int g=l+(h-l)/2; 因为如果写成 int g=(l+h)/2;会因为(l+h)计算值太大了超过了int的表达范围产生溢出。

两个程序原理是一样的,写法不一样:

// Forward declaration of guess API.// @param num, your guess// @return -1 if my number is lower, 1 if my number is higher, otherwise return 0int guess(int num);class Solution {public:    int guessNumber(int n) {        int l=1;        int h=n;        int g=l+(h-l)/2;        while(guess(g)!=0){            if(guess(g)==1){                l=g+1;                g=l+(h-l)/2;            }            else{                h=g-1;                g=l+(h-l)/2;            }        }        return g;    }};
// Forward declaration of guess API.// @param num, your guess// @return -1 if my number is lower, 1 if my number is higher, otherwise return 0int guess(int num);class Solution {public:    int guessNumber(int n) {        int l=1;        int h=n;        int g;        while(l<h){            g=l+(h-l)/2;            if(guess(g)==0) return g;            else if(guess(g)==1) l=g+1;            else  h=g-1;                    }        return l;    }};



0 0
原创粉丝点击