- 这就是 std::rotate 的功能,它可以交换两个区间范围内的元素
class Solution {
public:
void rotate(vector<int>& nums, int k) {
std::rotate(rbegin(nums), rbegin(nums) + k % size(nums), rend(nums));
}
};
- 原理是三次翻转
1234 567 => 目标 567 1234
765 4321
567 1234
- 实现如下
class Solution {
public:
void rotate(vector<int>& nums, int k) {
k %= size(nums);
reverse(begin(nums), end(nums));
reverse(begin(nums), begin(nums) + k);
reverse(begin(nums) + k, end(nums));
}
};