因为是右移数组,理论上移动k次(注意k要小于数组的长度),那么最终最后k个元素就应该在最前面,我的想法是用一个数组按顺序从倒数第k个元素开始存,最后更新到nums里面即可,时间复杂度为o(n);还可以用三次翻转法,继续摸索一下
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int j = nums.size() - k % nums.size();//k可能大于数组的长度
vector<int> A;//中间容器
while (j != nums.size())
{//将需要翻转到前面的元素填入A
A.push_back(nums[j]);
j++;
}
for (int i = 0; i < nums.size() - k % nums.size(); i++)
{//剩下元素按顺序填入A
A.push_back(nums[i]);
}
for (int x = 0; x < nums.size(); x++)
{//最后更新nums数组
nums[x] = A[x];
}
}
};