注意点: k可能大于数组长度,要对数组长度求余
- 借用额外数组
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int n = nums.size();
vector<int> tmp(n);
for (int i = 0; i < n; i++) {
tmp[(i + k) % n] = nums[i];
}
nums.assign(tmp.begin(), tmp.end());
}
};
2. 原地修改,翻转数组
class Solution {
public:
void fun_swap(int l, int r, vector<int>& nums) {
while (l < r) {
swap(nums[l], nums[r]);
l++;
r--;
}
}
void rotate(vector<int>& nums, int k) {
int n = nums.size();
k %= n;
fun_swap(0, n - 1, nums);
fun_swap(0, k - 1, nums);
fun_swap(k, n - 1, nums);
}
};