[数组二分查找] 0374. 猜数字大小
文章目录
- 1. 题目链接
- 2. 题目大意
- 3. 示例
- 4. 解题思路
- 5. 参考代码
1. 题目链接
374. 猜数字大小 - 力扣(LeetCode)
2. 题目大意
描述:猜数字游戏。给定一个整数 nn 和一个接口 def guess(num: int) -> int:
,题目会从 1∼n 中随机选取一个数 x。我们只能通过调用接口来判断自己猜测的数是否正确。
要求:要求返回题目选取的数字 x。
说明:
def guess(num: int) -> int:
返回值:- −1:我选出的数字比你猜的数字小,即 pick<num;
- 1:我选出的数字比你猜的数字大 pick>num;
- 0:我选出的数字和你猜的数字一样。恭喜!你猜对了!pick==num。
3. 示例
输入:n = 10, pick = 6
输出:6
输入:n = 1, pick = 1
输出:1
4. 解题思路
思路 1:二分查找
利用两个指针 left、right。left 指向数字 1,right 指向数字 n。每次从中间开始调用接口猜测是否正确。
- 如果猜测的数比选中的数大,则 right 向左移,令
right = mid - 1
,继续从中间调用接口猜测; - 如果猜测的数比选中的数小,则 left 向右移,令
left = mid + 1
,继续从中间调用的接口猜测; - 如果猜测正确,则直接返回该数。
5. 参考代码
public class Solution extends GuessGame {public int guessNumber(int n) {int left=1, right=n;while(left < right){int mid=left+(right-left)/2;if(guess(mid)<=0){right=mid;}else{left=mid+1;}}return right;}
}