猜数字大小
一、LeetCode题解
瞧一瞧(求star!)
- LeetCode题解Javascript版本:Gitbook版本传送门
- LeetCode题解Javascript版本:CSDN传送门
- 前端进阶笔记:Gitbook传送门
二、算法题
题目
我们正在玩一个猜数字游戏。 游戏规则如下:
我从 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
};
结果
关于我
- decs: 19年毕业的前端开发一枚,沉迷Js
- E-mail: [email protected]
- 个人博客: CSDN
- GitHub: 传送门