问题描述

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.

Hint:
Could you do it in-place with O(1) extra space?

问题分析

先整个翻转数组,然后翻转0:k-1,再翻转k:n-1

代码

class Solution {
public:
   void rotate(vector<int>& nums, int k) {
 		int n = nums.size();
    	if(k>n) k=k%n;
    	// 翻转整个数组 
    	reverse(nums, 0, n-1);
    	// 翻转 0:k-1 
    	reverse(nums, 0, k-1);
		// 翻转 k:n-1
		reverse(nums, k, n-1); 
	}
	
	void reverse(vector<int>& nums, int i, int j) {
		while(i<j) {
			int t = nums[i];
			nums[i] = nums[j];
			nums[j] = t;
			i++,j--;
		}
	}
};