代码的哪一部分在hackerlink中创建了Segmentation Fault



我正试图在hackerlink中解决这个问题
https://www.hackerrank.com/challenges/circular-array-rotation/problem
其他每个测试都可以,但有一个测试正在创建分段故障。这是测试用例:
https://hr-testcases-us-east-1.s3.amazonaws.com/1884/input04.txt?AWSAccessKeyId=AKIAR6O7GJNX5DNFO3PV&过期=1648127766&签名=a0c1UvQ4t9DBn%2Fkr02ZnLUurhjk%3D&响应内容类型=文本%2平面我想知道我的代码的哪一部分正在创建Segmentation Fault,我想知道用代码和一些解释来解决它的方法,因为我认为我的代码不应该创建任何。这是我的代码:

vector<int> circularArrayRotation(vector<int> a, int k, vector<int> queries) {
rotate(a.begin(),a.begin()+a.size()-k,a.end());
vector<int> result;
cout<<result.size()<<endl;
for(auto x:queries) result.push_back(a[x]);
return result;
}

这是我在hackerbank解决方案中提交的代码。请帮我通过考试。

问题是:

rotate(a.begin(),a.begin()+a.size()-k,a.end());

根据问题陈述,约束条件为:

1 <= n <= 10^5
1 <= k <= 10^5

不存在k<=n、 你得到的测试用例就是命中率,n=515,k=100000。

所以问题是:

a.begin()+a.size()-k // a.size()-k, when k > n, is negative

因此,hackerbank编译器在执行a.begin((-负num.时出现了问题

为了解决这个问题,你应该确保它不会进入负边界,因为它是一个圆形旋转,一个完整旋转或1000个完整旋转不会改变任何事情,只有剩下的才重要:

rotate(a.begin(), a.begin() + a.size() - (k % a.size()), a.end());

它通过了所有的测试用例。

最新更新