在传递大整数时出现分段错误(Core Dumped)。它适用于较小的输入。
将int
替换为long int
,并尝试全局声明变量,但仍然是相同的错误。此函数用于执行许多右旋旋转,并以给定索引返回元素的值。这是函数:
vector<long long int> circularArrayRotation(vector<long long int> a, long long int k, vector<long long int> queries) {
vector <long long int> b;
std::vector<long long int> result(queries.size());
b=a;
for(long long int j=0;j<k;j++)
{
for(long long int i=0;i<a.size();i++)
a[i]=b[(a.size()+i-1)%a.size()];
b=a;
}
for(long long int k=0;k<queries.size();k++)
result[k]=a[queries[k]];
for(long long int i=0;i<result.size();i++)
cout<<result[i]<<endl;
return result;
}
其余代码可在此处link
中找到答案 0 :(得分:0)
vector
由一个连续的内存数组作为后盾,您的计算机无法分配这么大的数组。
您可以考虑改用list
,但是如果您关心性能,可能需要重写代码以使用迭代器。
答案 1 :(得分:0)
抛开实现的质量(无需复制任何副本即可旋转矢量,可以就地完成),最有可能导致segfault的错误出现在未显示的代码中。
要进一步调试,请使用以下链接:
如果您需要进一步的帮助,请发布整个代码。
==编辑==
您的代码不是触发段错误,而是HackerRank上的“由于超时而终止”错误。换句话说,您的解决方案太慢了。
那是因为不需要旋转任何东西来解决Circular Array Rotation:
vector<int> circularArrayRotation(vector<int> a, int k, vector<int> queries) {
vector<int> res;
res.reserve(queries.size());
int offset = k % a.size() - a.size();
for (int i : queries) {
res.push_back(a[(i - offset) % a.size()]);
}
return res;
}
即只需在选择请求的元素时考虑轮换即可。
答案 2 :(得分:0)
问题可能出在查询[k]> a.size()
result[k]=a[queries[k]];
由于我们不知道实际输入,因此很难找出原因。