使用二进制搜索方法的二和问题

Two-Sum Problem using Binary Search Approach

问题如下:-

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

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 中的函数 return 获取答案向量(具有两个索引)时,它给了我这个错误 :-

Line 1034: Char 9: runtime error: reference binding to null pointer of type 'int' (stl_vector.h) SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_vector.h:1043:9

PS:- 为什么几乎没有人针对此问题发布二进制搜索方法?

Why almost nobody has posted a binary search approach to this problem ?

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

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