文章作者:Tyan
博客:noahsnail.com | 优快云 | 简书
1. Description

2. Solution
- Version 1
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int n = nums.size();
int start = n - k % n;
int remainder = k % n;
vector<int> v(n);
for(int i = 0; i < remainder; i++) {
v[i] = nums[i + start];
}
for(int i = 0; i < start; i++) {
v[i + remainder] = nums[i];
}
for(int i = 0; i < n; i++) {
nums[i] = v[i];
}
}
};
- Version 2
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int n = nums.size();
int start = n - k % n;
int remainder = k % n;
vector<int> v(remainder);
for(int i = 0; i < remainder; i++) {
v[i] = nums[i + start];
}
for(int i = n - 1; i >= remainder; i--) {
nums[i] = nums[i - remainder];
}
for(int i = 0; i < remainder; i++) {
nums[i] = v[i];
}
}
};
- Version 3
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int n = nums.size();
reverse(nums.begin(), nums.end());
reverse(nums.begin(), nums.begin() + k % n);
reverse(nums.begin() + k % n, nums.end());
}
};

本文详细介绍了在C++中实现数组旋转的三种不同方法。包括使用额外数组的两个版本和一个利用反转技巧的高效版本。每种方法都有其特点,如Version1和Version2通过创建辅助数组来实现元素的重新排列,而Version3则通过三次反转数组部分来完成任务,避免了额外空间的使用。
412

被折叠的 条评论
为什么被折叠?



