LintCode-662. 猜数游戏(C++)
来源:互联网 发布:求一个windows live id 编辑:程序博客网 时间:2024/05/17 01:56
题目描述:
我们正在玩猜数游戏。 游戏如下:
我从 1 到 n 选择一个数字。 你需要猜我选择了哪个号码。
每次你猜错了,我会告诉你这个数字是高还是低。
你调用一个预定义的接口 guess(int num),它会返回 3 个可能的结果(-1,1或0):
原始代码:
// 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: /** * @param n an integer * @return the number you guess */ int guessNumber(int n) { // Write your code here }};
分析:
这道题其实可以看成一个查找算法(查找那个你要猜的数)。在这里我用的折半查找(平均时间复杂度为
O(log2n) )
- 第一次尝试:
// 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: /** * @param n an integer * @return the number you guess */ int guessNumber(int n) { // Write your code here int low = 1, high = n; while(low < high) { int mid = (low + high) / 2; int r = guess(mid); if(r == 1) { low = mid + 1; } else if(r == -1) { high = mid - 1; } else { return mid; } } }};
运行之后显示错误Time Limit Exceeded,然后显示的测试数据是2147483647,而这个数就是int型数据能储存的最大的数。这是因为
low + high
会出现超出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: /** * @param n an integer * @return the number you guess */ int guessNumber(int n) { // Write your code here int low = 1, high = n; while (low < high) { int mid = low + (high - low)/2; //这样就OK了! int r = guess(mid); if(r == 1) { low = mid + 1; } else if(r == -1) { high = mid - 1; } else { return mid; } } }};
阅读全文
0 0
- LintCode-662. 猜数游戏(C++)
- 猜数游戏-LintCode
- C#-猜数游戏
- C语言 猜数游戏
- C语言:猜数游戏
- 猜数游戏c实现
- C语言 猜数游戏
- 文曲星猜数游戏 C实现
- C#-猜数游戏-控制台(随机数)---ShinePans
- C语言之猜数游戏
- 猜数游戏--C语言描述
- 简单的C语言猜数游戏
- c/c++程序之_猜数游戏
- 啊哈C——学习5.10猜数游戏
- C实现一个比较简单的猜数游戏
- C/S 类型网络编程练习 猜数游戏
- 用c语言生成一个猜数游戏
- 猜数游戏程序
- JAVA中关于字符串在内存的存储
- 原理图设计的问题总结
- 表格添加数据+二级联动
- Java中部分常见语法糖
- (jQuery笔记)基础DOW和css操作
- LintCode-662. 猜数游戏(C++)
- 文章标题
- 6.3.3 二叉树重建【算法入门经典】【双十一大礼包】
- springmvc上传与下载
- - 小希的迷宫
- java(19):数据结构(2)--List
- Qml使用FontAwesome图标字体库
- 软件工程(C编码实践篇)学习心得
- 决战双十一,CBK全员玩命~~~