前言
猜数字大小的游戏,有一个预置的API guess(num)可以返回一个flag,如果猜的数字比选中数字小,flag为-1,比选中数字大,flag为1,猜中则flag为0。
题目地址:https://leetcode-cn.com/leetbook/read/binary-search/xee4ev/
一、解题思路
因为在Leetbook上面有一个模板,这道题又刚好在模板I下面,所以简单抄模板。
二、作业记录
1.作业代码
代码如下:
/**
* Forward declaration of guess API.
* @param num your guess
* @return -1 if num is lower than the guess number
* 1 if num is higher than the guess number
* otherwise return 0
* int guess(int num);
*/
public class Solution extends GuessGame {
public int guessNumber(int n) {
int left = 1, right = n;
while( guess(n) != 0){
if(guess(n) == -1){
right = n - 1;
}
else{
left = n + 1;
}
n = left + (right - left)/2;
}
return n;
}
}
2.作业表现
表现如下:
内存消耗表现不太好。真的很好奇,内存消耗很少的算法长得什么样?
复杂度分析
时间复杂度:感觉稍微有些复杂。最好情况就是n就是pick的数,直接返回,最差的情况应该是pick比较靠近最小端,需要多猜几次,我记得我第一次提交有一个测试用例超时了,po一下这个用例[50 1000]。假设pick 是 1,按照模板来的话,应该要猜log以2为底n的对数次吧。这么说起来,就算是O(logn)吧。
空间复杂度:说起来,这个题目只给一个数做入参,我们定义了两个整数指针,要说也是常数量的哈,那么应该是O(1)。其实这道题讨论空间复杂度意义不大。