408牛逼
数组翻转
先翻转前k个,再翻转后面的,然后再整个翻转。核心就是翻转数组元素的函数。有个点要注意,要用k模一下数组长度n。
class Solution {
public:
void reverseArray(vector<int>& nums, int start, int end) { // 对数组进行翻转
if (start >= end || start < 0 || end < 0) return;
for (int i = 0; i <= (end - start) / 2; ++i) {
swap(nums[start + i], nums[end - i]);
}
}
void rotate(vector<int>& nums, int k) {
int n = nums.size();
k %= n;
reverseArray(nums, 0, n - 1 - k);
reverseArray(nums, n - k, n - 1);
reverseArray(nums, 0, n - 1);
}
};