【问题标题】:Two-Sum Problem using Binary Search Approach使用二分搜索方法的二和问题
【发布时间】:2021-10-28 05:19:25
【问题描述】:

问题如下:-

给定一个整数数组和一个整数目标,返回两个数字的索引,使它们加起来等于目标。 例如:-

Input: vec = [2,7,11,15], target = 9
Output: [0,1]
Output: Because vec[0] + vec[1] == 9, we return [0, 1].

我使用二进制搜索方法对问题进行了编码,我的主要看起来像这样:-

    vector<int>vec = {2,7,11,15};
    int flag = 0;
    int target = 0,i;
    int idx;
    vector<int>::iterator it;
    for(i=0;i<vec.size();i++)
    {

        if(binary_search(vec.begin()+i,vec.end(),target-vec[i]))
        {
            it = lower_bound(vec.begin()+i,vec.end(),target-vec[i]);
            idx = it-vec.begin();
            if (i!=idx)
            {
               flag = 1;
               break;
            }
        }
    }

    if(flag==1)
    {
        cout<<"Found @"<<idx<<"and "<<i<<endl;
    }
    else{
        cout<<"Not found";
    } 

它给出了正确的答案。

问题是,当我使用这种方法并从 Leetcode 中的函数返回答案向量(具有两个索引)时,它给了我这个错误:-

第 1034 行:字符 9:运行时错误:引用绑定到 类型'int'(stl_vector.h)摘要:UndefinedBehaviorSanitizer: 未定义行为 /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_vector.h:1043:9

PS:- 为什么几乎没有人发布二进制搜索方法来解决这个问题?

【问题讨论】:

    标签: c++ binary-search


    【解决方案1】:

    为什么几乎没有人发布针对这个问题的二分搜索方法?

    应用二分查找算法,需要对输入进行排序,这会直接改变数组的索引,这个问题用起来不太方便。

    由于您的输入数组已排序,您可能会在示例输入中得到正确的结果;但所有输入可能不会按排序顺序排列。照顾好这个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-30
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      • 1970-01-01
      • 2013-11-15
      相关资源
      最近更新 更多