LeetCode笔记:374. Guess Number Higher or Lower

问题:

We are playing the Guess Game. The game is as follows:
I pick a number from 1 to n. You have to guess which number I picked.
Every time you guess wrong, I'll tell you whether the number is higher or lower.
You call a pre-defined API guess(int num) which returns 3 possible results (-1, 1, or 0):

-1 : My number is lower
1 : My number is higher
0 : Congrats! You got it!
Example:
n = 10, I pick 6.
Return 6.

大意:

我们玩一个猜数字游戏,方法如下:
我在1到n之间选一个数字,你来猜我选的是什么
每次你猜错了,我都会告诉你数字是大了还是小了
你可以调用预定义的 API guess(int num) ,它会返回三个可能的结果 (-1, 1, or 0):

-1 : 我的数字更小
1 : 我的数字更大
0 : 恭喜!猜中了!
例子:
n = 10, 我选 6.
返回6.

思路:

这道题题目主动提示了用二分法来做,所以只用把二分法的思想写出来,根据每次猜测得到的大了或者小了的结果来进行分别处理。猜小了就在大的那个区间去继续取中间数字猜,猜大了就在小的那个区间取中间数字猜,因为取中间数字猜整体来说是最快的,为了记录区间,还要保留上次猜的情况,来让区间越缩越小。

代码(Java):

/* 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) {
        return helper(1,n);
    }
    
    public int helper(int start, int end){
        if(start == end) return start;
        int mid = Math.toIntExact(((long)start+(long)end)/2);
        int r = 0;
        if(guess(mid) == 0) r = mid;
        else if(guess(mid) == 1) r = helper(mid+1, end);
        else if(guess(mid) == -1) r = helper(start, mid-1);
        return r;
    }
}

合集:https://github.com/Cloudox/LeetCode-Record


查看作者首页

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,778评论 0 33
  • 今天我起得特别早,因为今天是星期三得诵读,我六点就起来了,我刚起来穿好衣服就看到了一个背影在厨房里忙忙碌碌的做饭,...
    荣耀健身器材阅读 198评论 0 0
  • 今天是讲师班的第五天也是最后一天,我们组的伙伴都很齐心,努力把群保持在一个活跃度上,也确实做到了。而且成为别的群的...
    裕雅说动漫阅读 178评论 1 2
  • 相信很多iOS开发者对内存分配的概念比较模糊,没有去好好研究与我们经常打交道的变量,是如何分配内存的。很多小伙伴应...
    iTruda阅读 1,842评论 1 8