374. 猜数字大小

题目

猜数字游戏的规则如下:

  • 每轮游戏,我都会从 1n 随机选择一个数字。 请你猜选出的是哪个数字。
  • 如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。

你可以通过调用一个预先定义好的接口 int guess(int num) 来获取猜测结果,返回值一共有 3 种可能的情况(-110):

  • -1:我选出的数字比你猜的数字小 pick < num
  • 1:我选出的数字比你猜的数字大 pick > num
  • 0:我选出的数字和你猜的数字一样。恭喜!你猜对了!pick == num

返回我选出的数字。

示例1:

1
2
输入:n = 10, pick = 6
输出:6

示例2:

1
2
输入:n = 1, pick = 1
输出:1

示例3:

1
2
输入:n = 2, pick = 1
输出:1

示例4:

1
2
输入:n = 2, pick = 2
输出:2

提示:

  • 1 <= n <= 231 - 1
  • 1 <= pick <= n

解法

解法一:

二分查找

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/* The guess API is defined in the parent class GuessGame.
@param num, your guess
@return -1 if my number is lower, 1 if my number is higher, otherwise return 0
int guess(int num); */

public class Solution extends GuessGame {
public int guessNumber(int n) {
int mid = 0;
int begin = 1;
int end = n;
while (begin <= end) {
mid = begin + (end - begin) / 2;
if (1 == guess(mid)) {
begin = mid + 1;
} else if (-1 == guess(mid)) {
end = mid - 1;
} else {
return mid;
}
}
return -1;
}
}
0%