给定一个整数数组和一个整数K,任务是将数组的元素移动K.也就是说,给定A = [3 8 9 7 6],输出应为[9 7 6 3 8 ]。输出也需要是一个向量。
下面是我的代码,但它产生了一个seg错误!出了什么问题?
vector<int> solution(vector<int> &A, int K) {
int sizeA = A.size();
vector<int> B;
for (int i = 0; i < sizeA; i++) {
B[i] = A[(i+K) % sizeA];
}
return B;
}
感谢评论和回答,正确的代码是
vector<int> solution(vector<int> &A, int K) {
int sizeA = A.size();
vector<int> B(sizeA);
for (int i = 0; i < sizeA; i++) {
B[(i+K) % sizeA] = A[i];
}
return B;
}
答案 0 :(得分:2)
您尝试索引B
,但它只是默认构造,因此其大小为0并且索引任何元素都会产生未定义的行为。您可以使用正确的大小构建它,或者调整大小()以获得正确的大小,或者只使用push_back以正确的顺序将项目推入其中。或者您使用std::rotate
将原始曲目旋转到位。
答案 1 :(得分:1)
你应该使用 vector(size_type n)来构建 B
vector<int> solution(vector<int> &A, int K) {
int sizeA = A.size();
//make a B of sizeA elements
vector<int> B(sizeA);
for (int i = 0; i < sizeA; i++) {
B[i] = A[(i+K) % sizeA];
}
return B;
}
答案 2 :(得分:1)
B还没有初始化,所以索引它会给你一个错误。
而不是使用:
B[i] = A[(i+K) % sizeA];
使用:
B.push_back(A[(i+K) % sizeA]);