如何确定二进制搜索的边界?

时间:2018-07-09 20:42:56

标签: binary-search

我知道二进制搜索的工作原理,但是当我需要执行二进制搜索时,我总是会犯一些小错误。

以下代码是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。我返回哪个值?

是否有记住或理解要使用的正确组合的好方法?

1 个答案:

答案 0 :(得分:0)

您可以只使用leetcode的指南进行二进制搜索以供参考。 https://leetcode.com/explore/learn/card/binary-search