分段错误11:在这种排序和搜索问题中
Posted
技术标签:
【中文标题】分段错误11:在这种排序和搜索问题中【英文标题】:segmentation fault11: in this sort and search question 【发布时间】:2020-04-04 07:27:07 【问题描述】:将总和复制到 cpy 对 cpy 进行排序以便稍后进行二分搜索 迭代 cpy 搜索目标 - current_no。 如果存在于 cpy 中 获取原始向量 nums 中的索引 将索引附加到结果向量并返回结果向量问题: 给定一个整数数组,返回两个数字的索引,使它们相加为特定目标。
解决方案-
#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;
【问题讨论】:
仅供参考,只需通过一次即可通过列表。你也不需要排序。想想unordered_set
。
【参考方案1】:
很简单,您正在向 cpy
向量写入值,但它的大小为零。
有一个非常简单的方法来复制向量,只需使用=
。
vector<int> cpy = nums;
这就是你所需要的。你不需要你写的 for 循环。
【讨论】:
旁注:调试器几乎可以立即找到原因。在调试器中运行程序。等待崩溃。查看回溯以获取线索。如果您不知道需要先适当地调整vector
的大小,您仍然会遇到困难,但至少您离得更近了。
是的,我使用过 gdb,但不知道向量首先需要大小。以上是关于分段错误11:在这种排序和搜索问题中的主要内容,如果未能解决你的问题,请参考以下文章