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
public class Solution { //先翻转整个数组,然后再翻转左半部分,然后再翻转右半部分,空间复杂度O(0) public void rotate(int[] nums, int k) { k=k%nums.length; reverse(nums,0,nums.length-1); reverse(nums,0,k-1); reverse(nums,k,nums.length-1); } public void reverse(int[] nums,int start,int end){ while(start<end){ int temp=nums[start]; nums[start]=nums[end]; nums[end]=temp; start++; end--; } } //解法二:每个数字移动k次,空间复杂度O(1),时间复杂度O(K*N),AC不通过 /* public void rotate(int[] nums, int k){ int len=nums.length; k=k%len; for(int i=0;i<k;i++){ int temp=nums[len-1]; for(int j=len-1;j>0;j--){ nums[j]=nums[j-1]; } nums[0]=temp; } }*/ //第三种解法:coyt数组 }