1 题目
2 坑
- k有可能会超出数组大小,需要先取余,判断是否出界
3 思路
题意其实就是把后k个数字放到前面来,然后再反转个顺序。(原来vector也可以用swap,学到了)
具体来说:
- 反转整个数组
- 反转前k个
- 反转后k个
4 AC 代码
class Solution {
public:
void reverse(vector<int>& nums, int i, int j) {
while (i< j) {//双指针
swap(nums[i], nums[j]);
i++;
j--;
}
}
void rotate(vector<int>& nums, int k) {
k=k%nums.size();//防止出界
reverse(nums, 0, nums.size() - 1);//翻转 5 4 3 2 1
reverse(nums, 0, k - 1);//翻转 3 4 5 2 1
reverse(nums, k, nums.size() - 1);// 翻转 3 4 5 1 2
}
};