本文主要是介绍374猜数字大小(二分查找),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、题目描述
猜数字游戏的规则如下:
每轮游戏,我都会从 1 到 n 随机选择一个数字。 请你猜选出的是哪个数字。
如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。
你可以通过调用一个预先定义好的接口 int guess(int num) 来获取猜测结果,返回值一共有 3 种可能的情况(-1,1 或 0):
- -1:我选出的数字比你猜的数字小 pick < num
- 1:我选出的数字比你猜的数字大 pick > num
- 0:我选出的数字和你猜的数字一样。恭喜!你猜对了!pick == num
提示:
- 1 <= n <= 2^31 - 1
- 1 <= pick <= n
2、示例
输入:n = 10, pick = 6
输出:6
3、题解
基本思想:二分查找折半查找,求mid时不能用mid=(high+low)/2会超过2^31-1
#include<iostream>
#include<vector>
#include<algorithm>
#include<set>
#include<map>
using namespace std;
int pick=45;
int guess(int num)
{if(pick<num)return -1;else if(pick>num)return 1;elsereturn 0;
}
class Solution {
public:int guessNumber(int n) {//基本思想:二分查找折半查找,求mid时不能用mid=(high+low)/2会超过2^31-1int mid,low=1,high=n;while(true){mid=(high-low)/2+low;if(guess(mid)==-1)high=mid-1;else if(guess(mid)==1)low=mid+1;elsebreak;}return mid;}
};
int main()
{Solution solute;int n=78;cout<<solute.guessNumber(n)<<endl;return 0;
}
这篇关于374猜数字大小(二分查找)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!