https://leetcode-cn.com/problems/rotate-array/
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
package factory;
/**
* @Auther: Jaryn
* @Date: 2019/12/7 18:14
* @Description: 旋转数组
* https://leetcode-cn.com/explore/interview/card/top-interview-quesitons-in-2018/264/array/1128/
*/
public class Rotate {
public static void main(String[] args) {
int[] nums = new int[]{1};
int k = 3;
rotate2(nums, k);
for(int i =0; i<nums.length; i++) {
System.out.println(nums[i]);
}
}
/**
* 每次从最后一位往前进,比较慢
* 120 ms
* @param nums
* @param k
*/
public static void rotate1(int[] nums, int k) {
int len = nums.length;
for(int i = len - 1; i>= len - k; i--) {
int temp = nums[len -1];
for(int j = len -2; j>= 0; j--) {
nums[j +1] = nums[j];
}
nums[0] = temp;
}
}
/**
* 每个元素移动len-k位
* 98 ms
* @param nums
* @param k
*/
public static void rotate2(int[] nums, int k) {
int len = nums.length;
k = k %len;
for(int i = Math.abs(len - k); i<len ; i++) {
int temp = nums[i];
int m = i-len+k;
for(int j = i-1; j>= m; j--) {
nums[j +1] = nums[j];
}
nums[m] = temp;
}
}
}