我知道二进制搜索的工作原理,但是当我需要执行二进制搜索时,我总是会犯一些小错误。
以下代码是leetcode 287 find the duplicate number
的解决方案class Solution {
public:
int findDuplicate(vector<int>& nums) {
int low = 1, high = nums.size() - 1;
while (low < high) {
int mid = low + (high - low) * 0.5;
int cnt = 0;
for (auto a : nums) {
if (a <= mid) ++cnt;
}
if (cnt <= mid) low = mid + 1;
else high = mid;
}
return low;
}
};
我对几个地方感到困惑:
1。while循环low<high or low<=high
2。a<=mid or a<mid
(此示例专用)
3。cnt<= mid or cnt<mid
4。low=mid+1 or low=mid
5。high=mid or high=mid-1
6。我返回哪个值?
是否有记住或理解要使用的正确组合的好方法?
答案 0 :(得分:0)
您可以只使用leetcode的指南进行二进制搜索以供参考。 https://leetcode.com/explore/learn/card/binary-search