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]
.
题意:一个简单的数组旋转,注意当k大于数组长度时,相当于对数组旋转k%len(数组长度)次
调用algorithm里的reverse函数进行3次反转即可,要注意reverse这个函数 是半闭合!!!,左闭又开
比如reverse(a.begin(),a.begin()+3) 是反转vector数组 a[0]....a[2]
C++ AC 代码: Time O(n) Space O(1)
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int len = nums.size();
k=k%len;
if(k!=0){
int i=0;
int mid = len-k;
reverse(nums.begin(),nums.begin()+mid); //注意reverse是<algorithm>里的函数,reverse是 半闭合!!!!的反转 左闭合右开
reverse(nums.begin()+mid,nums.end());
reverse(nums.begin(),nums.end());
}
}
};