题目
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].
解答
方法一
利用STL中的rotate
方法
Exchanges the elements in two adjacent ranges.
Syntax
template
void rotate(
ForwardIterator _First,
ForwardIterator _Middle,
ForwardIterator _Last
);
Parameters
_First
A forward iterator addressing the position of the first element in the range to be rotated.
_Middle
A forward iterator defining the boundary within the range that addresses the position of the first element in the second part of the range whose elements are to be exchanged with those in the first part of the range.
_ Last
A forward iterator addressing the position one past the final element in the range to be rotated.
算法
void rotate(vector<int>& nums, int k) {
k = k % nums.size();
rotate(nums.begin(), nums.end() - k , nums.end());
}
方法二
向右移动就几步,就相当于将后面几个数插入到前面来
void rotate(vector<int>& nums, int k) {
k = k % nums.size();
if (k == 0)
return;
for (int i = 0; i < k; i++) {
nums.insert(nums.begin(), *(nums.end() - 1));
nums.pop_back();
}
}
ps 这道题方法很多,我只写了两个比较容易写的方法。