segmentation fault11:在这种排序和搜索问题中

segmentation fault11: in this sort and search question

question: Given an array of integers, return indices of the two numbers such that they add up to a specific target.

solution -

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        
        vector<int>cpy;
        vector<int>result(2);
        result[0] = 0;
        result[1] = 0;
        
        int indx = 0;
        for(indx = 0; indx < nums.size(); ++indx)
        {
            cpy[indx] = nums[indx];
        }
        
        // sorting to enable binary search on vector later on
        sort(cpy.begin(), cpy.end());
        
        
        int x, y;
        bool ispresent;
        vector<int>:: iterator base1;
        vector<int>:: iterator it2;
        base1 = nums.begin();
        
        for(indx = 0; indx < cpy.size(); ++indx)
        {
            x = cpy[indx];
            y = target - x;
            
            // sing bin search to make search time faster
            ispresent = binary_search(cpy.begin() + indx, cpy.end(), y);
            
            if(ispresent)
            {
                cout << "found" << endl;
                // fiding index of x, y in original vector nums
                result[0] = find(nums.begin(), nums.end(), x) - base1;
                result[1] = find(find(nums.begin(), nums.end(), x) + 1, nums.end(), y) - base1;
                break;
            }
        }
        return result;
    }
    
};

int main()
{
    int n;
    cin >> n;

    vector<int> v(n);
    for(int i = 0; i < n; ++i)
    {
        cin >> v[i];
    }

    int target;
    cin >> target;

    Solution ob;

    vector<int>res = ob.twoSum(v, target);
    cout << res[0] << " " << res[1] << endl;

    return 0;
}

很简单,您正在将值写入 cpy 向量,但它的大小为零。

有一种非常简单的方法可以复制向量,只需使用 =

vector<int> cpy = nums;

这就是您所需要的。您不需要您编写的 for 循环。