Rotate an array of n elements to the right by k steps.
For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].
Note:
Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.
Related problem: Reverse Words in a String II
第一种:
class Solution {
public:
void rotate(vector& nums, int k) {
const int n = nums.size();
k = k % n;
vector backup(nums.end() - k, nums.end());
for(int i = n - 1 ; i >= k ; --i)
{
nums[i] = nums[i-k];
}
for( int i = 0; i < k; i++)
{
nums[i] = backup[i];
}
}
};
第二种:
class Solution {
public:
void rotate(vector& nums, int k) {
const int n = nums.size();
k = k % n;
reverse(nums.begin(), nums.end());
reverse(nums.begin() + k, nums.end());
reverse(nums.begin(), nums.begin() + k ) ;
}
};
vector中的begin指的是容器的第一个元素,end指的容器中最后一个元素的下一个元素
本文介绍两种不同的数组旋转方法:一种通过备份部分元素并重新赋值实现;另一种利用反转操作完成旋转。这两种方法均可解决将数组元素向右旋转k步的问题。
582

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



