在LeetCode刷题,旋转数组出现了一个小问题,未解决,记录一下。
题目:
给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
以下为代码模板:
class Solution {
public:
void rotate(vector<int>& nums, int k) {
}
};
考虑用vector解决:
class Solution {
public:
void rotate(vector<int>& nums, int k) {
k %= nums.size();
nums.insert(nums.begin(), nums.end(), nums.end()+1);
nums.erase(nums.end() - k, nums.end());
}
};
但是在提交时候却出了问题
当输入数组为[1,2,3],k=1时,输出不正确,但其他数据正确。
手动输出*( nums.end()-k)
确实是最后一项3,但insert的却时倒数第二项2,
而把迭代器指针改为end()+1后,即:nums.insert(nums.begin(), nums.end(), nums.end()+1);
输出正确
nums.end()不是末尾元素的下一个位置吗?按理说编译通过不了啊,
当把测试数据改为[1,2,3,4]时,果然报错了,至今还没搞清楚原因…