传递大整数时出现段错误(核心已转储)。它适用于较小的输入。
用long int
替换了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
最佳答案
撇开实现质量不谈(不需要复制任何拷贝来旋转 vector ,它可以就地完成),导致段错误的错误很可能是在未显示的代码中。
要进一步调试,可以使用以下链接:
如果您需要进一步的帮助,请发布您的完整代码。
== 编辑 ==
您的代码没有触发段错误,而是触发了 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;
}
即选择请求的元素时只需考虑旋转。
关于c++ - 将大整数作为 vector 中的值传递时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56321506/