4ff7c04ea2444474a29c3b16a368cff8.png
【题目】:189. 轮转数组

class Solution {
public:
void reverse(vector<int>& nums, int begin, int end) {
for(int i = begin, j = end; i < j; ++i, --j) {
swap(nums[i], nums[j]);
}
}
void rotate(vector<int>& nums, int k) {
int n = nums.size();
k = k % n;
reverse(nums, 0, n - 1);
reverse(nums, 0, k - 1);
reverse(nums, k, n - 1);
}
};
  • 时间复杂度: O(n)
  • 空间复杂度: O(1)
    074a88e5956949eca09251d4b5d947eb.png

如图所示,这题可以进行三次反转,先把数组全部反转,再反转前半部分,反转后半部分,即可得到结果。