leetcode374: Guess Number Higher or Lower

来源:互联网 发布:进击的巨人剧透 知乎 编辑:程序博客网 时间:2024/05/21 16:52
要求:

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 (-11, or 0):

-1 : My number is lower 1 : My number is higher 0 : Congrats! You got it!
注意:思路简单,用二分法查找即可,每次更新上下限。但是有几点要注意:

1、更新下限时,low = mid + 1而不是low = mid。更新上限时,high = mid - 1而不是high = mid。

举个例子,在[1 2 3]中查找3。

如果low = mid,high = mid

那么会导致low始终指向2,更新不了!!!!!

2、不能用 ( i + j ) / 2 来更新i或者j,因为当i和j靠近int型变量的范围边缘时,有可能会导致计算的结果超出int变量的范围!!!

只能用i = i + ( j - i ) / 2

public int guessNumber(int n) {int i = 1;int j = n;while (i <= j) {int re = i + (j - i) / 2;int flag = guess(re);if (flag == 0)return re;if (flag == 1)i = re + 1;if (flag == -1)j = re - 1;}return -1;}


0 0
原创粉丝点击