当前位置: 首页 > 知识库问答 >
问题:

对二元seach问题中值域问题的认识

阮俊弼
2023-03-14

编辑:
添加有关代码背后逻辑的更多细节。Thx到@stef。

class Solution {
public:
    int findRepeatNumber(vector<int> &nums) {
        // special case we return -1
        if (nums.size() < 2) {
            return -1;
        }

        // binary search to cnt the numbers in certain range
        int start = 1;
        int end = nums.size() - 1;
        while (end >= start) {

            int mid = ((end - start) >> 1) + start;
            int cnt = cntRange(nums, start, mid);

            if (end == start) {
                if (cnt > 1) {
                    return start;
                } else {
                    break;
                }
            }

            if (cnt > (mid - start + 1))
                end = mid;
            else
                start = mid + 1;
        }
        return -1;
    }

    int cntRange(vector<int> &nums, int start, int end) {
        int cnt = 0;
        for (int i = 0; i < nums.size(); ++i) {
            if (nums[i] >= start && nums[i] <= end)
                cnt++;
        }
        return cnt;
    }
};

我将start int初始化为0,并将cnt比较条件
从cnt>(mid-start+1)更改为cnt>(mid-start)。
但是在这种情况下,只通过了第一个测试,仍然无法通过第二个测试。

我仍然认为这个问题是在cnt比较过程中出现的,但不知道如何解决这个问题。
有人能在这个问题上帮助我吗?

共有1个答案

马嘉勋
2023-03-14

你提到的两种情况的问题是:

start = mid + 1;

mid的值永远不能变为负值,因此在第一次到达这条线之后,start的最小值永远不能小于1。这意味着在进行二进制搜索时,您永远不会看到索引0处的值。

 类似资料:
  • 平时被问到最多的问题还是关于跨域的,其实跨域问题真的不是一个很难解决的问题。这里我来简单总结一下我推荐的几种跨域解决方案。 我最推荐的也是我工作中在使用的方式就是: cors 全称为 Cross Origin Resource Sharing(跨域资源共享)。这种方案对于前端来说没有什么工作量,和正常发送请求写法上没有任何区别,工作量基本都在后端这里。每一次请求,浏览器必须先以 OPTIONS 请

  • 问题内容: 我有以下db型号: 我使用以下命令添加新实例: 我的问题:数据库中的所有记录在日期字段中都有相同的值,即第一次付款的日期。服务器重新启动后,一条记录具有新的日期,而另一条记录与第一条记录具有相同的日期。看起来有些数据被缓存了,但我找不到位置。 数据库:mysql 5.1.25 django 1.1.1版 问题答案: 在定义模型时,似乎正在计算,而不是每次添加记录时。 Django有一个

  • 问题内容: 我正在尝试访问另一个域中的Web服务,但它不返回任何内容。后来我发现这是一个跨域访问的问题。 我在网上搜索了很多文章,但像我这样的新手都看不懂。:( 有人可以帮助我如何访问Web服务吗? 以下是我的代码。 问题答案: 浏览器不允许跨域AJAX调用。仅允许跨域JSONP请求。 要使用JSONP请求,您必须将属性更改为。但是,这意味着您不能请求XML,而只能请求JSONP。 关于JSONP

  • 我正在解决以下问题从hackerrankhttps://www.hackerrank.com/challenges/coin-change/problem 我无法解决这个问题,所以我看了社论,他们提到 T(i, m)=T(i, m-i)T(i 1, m) 我无法从整体上理解为什么这个解决方案在更高的层次上有效。(如CLRS中的证明或简单易懂的示例) 我写的解决方案如下 我的解决方案不起作用,因为有

  • 下面的问题怎么解决?

  • 问题内容: 可以说,我有一个名为example.com的网站,在该网站上嵌入了iframe.net域的iframe,现在我想读取iframe的内容并传递一些参数以显示文本消息。像Hi和用户名一样。 现在的问题是,这无法在两者之间建立连接,甚至无法获得我使用以下方法使用的iframe的innerHTML 它将引发错误“权限被拒绝访问属性” 有谁知道如何在跨域平台中读写 问题答案: 如果您无法控制框架