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.
这道题很有趣,注意k可能是大于n的,思路:
- 先倒置
- 倒置0-k
- 倒置后半部分
类似题目:Reverse Words in a String II
public class Solution { public void rotate(int[] nums, int k) { while(k>nums.length){ k -= nums.length; } rev(nums,0,nums.length-1); rev(nums,0,k-1); rev(nums,k,nums.length-1); } public void rev(int[] nums,int start,int end){ while(start<end){ int temp = nums[start]; nums[start] = nums[end]; nums[end] = temp; start ++; end --; } } }