https://leetcode.com/problems/rotate-array/description/
题目描述: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个单元,可以先将整个数组逆序,再将0~k-1索引的元素逆序,再将k~length-1索引的元素逆序。注:因为k长度可能大于length,所以需要将k%length后求得向右位移的真实长度。
public void rotate(int[] nums,int k){
int len = nums.length;
k=k%len;
reverse(nums,0,len-1);
reverse(nums,0,k-1);
reverse(nums,k,len-1);
}
public static void reverse(int[] nums,int start,int end){
int temp;
for(int i=start,j=end;i<=j;i++,j--){
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}