简介
题解
方法一:
我们可以使用额外的数组来将每个元素放至正确的位置。用 \(n\) 表示数组的长度,我们遍历原数组,将原数组下标为 \(i\) 的元素放至新数组下标为 \((i+k) mod n\) 的位置,最后将新数组拷贝至原数组即可。
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int n = nums.size();
vector<int> newArr(n);
for (int i = 0; i < n; ++i) {
newArr[(i + k) % n] = nums[i];
}
nums.assign(newArr.begin(), newArr.end());
}
};
作者:力扣官方题解
链接:https://leetcode.cn/problems/rotate-array/solutions/551039/xuan-zhuan-shu-zu-by-leetcode-solution-nipk/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
方法二:
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);
}
};
标签:end,nums,int,newArr,start,数组,轮转
From: https://www.cnblogs.com/parallel-138/p/17422025.html