【题干】
给定一个整数数组 nums
,将数组中的元素向右轮转 k
个位置,其中 k
是非负数。
【思路】
经典老题,就不从数学角度证明了,三次翻转解决问题。
【题解】
class Solution {
public:
void reverse(vector<int>& nums, int start, int end) {
while (start < end) {
swap(nums[start], nums[end]);
start += 1;
end -= 1;
}
}
void rotate(vector<int>& nums, int k) {
k %= nums.size();
reverse(nums, 0, nums.size() - 1);
reverse(nums, 0, k - 1);
reverse(nums, k, nums.size() - 1);
}
};