LeetCode题解:374.猜数字大小

猜数字大小

一、LeetCode题解

瞧一瞧(求star!)

二、算法题

题目

我们正在玩一个猜数字游戏。 游戏规则如下:
我从 1 到 n 选择一个数字。 你需要猜我选择了哪个数字。
每次你猜错了,我会告诉你这个数字是大了还是小了。
你调用一个预先定义好的接口 guess(int num),它会返回 3 个可能的结果(-1,1 或 0):

-1 : 我的数字比较小
 1 : 我的数字比较大
 0 : 恭喜!你猜对了!

示例 :

输入: n = 10, pick = 6
输出: 6

解法一 (暴力)

思路

  • 循环遍历整个数据
  • 时间复杂度O(n)

代码

var guessNumber = function(n) {
    for(let i = 1; i < n; i++){
        if(guess(i) === 0) return i
    }
    return n
};

解法二(二分查找)

思路

  • 利用set存储数组中出现的不重复的数字
  • [ (a+b+c) * 3 - (a+a+a+b+b+b+c) ] / 2 = c

代码

var guessNumber = function(n) {
    let left = 1;
    let right = n;
    let mid;

    while(left <= right){
        mid = parseInt((left + right)/2);
        if(guess(mid) === 0){
            break
        }else if(guess(mid) === 1){
            left = mid + 1;
        }else if(guess(mid) === -1){
            right = mid-1;
        }
    }
    return mid
};
结果

在这里插入图片描述

关于我

猜你喜欢

转载自blog.csdn.net/jbj6568839z/article/details/106208957