文章目录
LeetCode、374. 猜数字大小【简单,二分】
来源:LeetCode专题《LeetCode 75》
题目及类型
题目链接:LeetCode、374. 猜数字大小
类型:基础算法/二分
思路及代码实现
思路:
注意点:对于l + r可能会爆int,我们可以使用一个临时long存储,接着再转为int。
对于猜测的数若是<=目标值,那么区间范围为[l, mid],若是>目标值,区间值范围[mid + 1, r],在本题中由于一定能够命中某一个值,那么最终的结果就一定是l或者r。
代码:
复杂度分析:时间复杂度O(logn);空间复杂度O(1)
/**
* Forward declaration of guess API.
* @param num your guess
* @return -1 if num is higher than the picked number
* 1 if num is lower than the picked number
* otherwise return 0
* int guess(int num);
*/
public class Solution extends GuessGame {
public int guessNumber(int n) {
int l = 1, r = n;
while (l < r) {
//取到中间值 (long)l + r >> 1 会超时,会构成这样的效果(long)l + (r >> 1)
//我们的目的应该是((long)l + r) >> 1
long tmp = ((long)l + r) >> 1;//临时使用long存储
int mid = (int)tmp;
int pick = guess(mid);
//若是<=,那么区间为[l, mid],若是> 则为[mid + 1, r]
if (pick <= 0) {
r = mid;
}else {
l = mid + 1;
}
}
return l;
}
}

整理者:长路 整理时间:2024.1.19
评论区请在客户端页面查看