目录
1 解决方案
1.1 方案1
复制数组, 依次移动。
class Solution {
public:
void rotate(vector<int>& nums, int k) {
vector<int> temp(nums.size());
for (int n = 0; n< nums.size(); n++){
temp[n] = nums[n];
}
for (int i= 0; i < nums.size(); i++){
int j = (i+k)%nums.size();
nums[j] = temp[i];
}
}
};
class Solution {
public:
void rotate(vector<int>& nums, int k) {
vector<int> temp(nums.size());
for (int n = 0; n< nums.size(); n++){
temp[n] = nums[n];
}
for (int i= 0; i < nums.size(); i++){
int j = (i+k)%nums.size();
nums[j] = temp[i];
}
}
};
2 遇到的问题
2.1 空指针
报错信息:
第1034行:字符 9:运行时错误:引用绑定到类型为“int”的空指针
Line 1034: Char 9: runtime error: reference binding to null pointer of type 'int' (stl_vector.h)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_vector.h:1043:9
报错代码:
class Solution {
public:
void rotate(vector<int>& nums, int k) {
vector<int> temp;
for (int n = 0; n< nums.size(); n++){
temp[n] = nums[n];
}
for (int i= 0; i < nums.size(); i++){
int j = (i+k)%nums.size();
nums[j] = temp[i];
}
}
};
class Solution {
public:
void rotate(vector<int>& nums, int k) {
vector<int> temp;
for (int n = 0; n< nums.size(); n++){
temp[n] = nums[n];
}
for (int i= 0; i < nums.size(); i++){
int j = (i+k)%nums.size();
nums[j] = temp[i];
}
}
};
问题原因:
声明vector容器时,没有指定大小。
解决方法:使用尾插法或者指定容器大小。