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]
.
先翻转数组前n-k的部分,然后翻转数组后面k个数字,然后翻转整个数组。即:
[4,3,2,1,5,6,7],[4,3,2,1,7,6,5],
[5,6,7,1,2,3,4]
class Solution {
public:
void rotate(int nums[], int n, int k) {
k%=n;//处理K大于n的情况
if(k<=0)return;
if(n<=1)return;
revert(nums,0,n-k-1);
revert(nums,n-k,n-1);
revert(nums,0,n-1);
}
void revert(int nums[],int begin,int end){
for(int i=begin,j=end;i<=j;i++,j--){
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}
};