189. 旋转数组
-
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
示例 1:
输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右旋转 1 步:
[7,1,2,3,4,5,6] 向右旋转 2 步: [6,7,1,2,3,4,5] 向右旋转 3 步: [5,6,7,1,2,3,4]
示例 2:输入: [-1,-100,3,99] 和 k = 2 输出: [3,99,-1,-100] 解释: 向右旋转 1 步:
[99,-1,-100,3] 向右旋转 2 步: [3,99,-1,-100]
package leetcode;
/**
* @author 夕
* @date 2019/4/16
*/
public class RotateTheArray {
public static int[] rotate(int[] nums, int k) {
//如果k值等于length ,则表示进行了一次循环,数组并未移位,所以要将k 值取余
k %= nums.length;
//设置临时数组存放将要从末尾移位的元素
int[] temp = new int[k];
for(int i = 0; i<k ; i++ ){
temp[k-1-i] = nums[nums.length-1-i];
}
//将数组中的元素进行移位,只移动不会出现移动到头部的元素。
//并且先从下标最大的元素开始移动,防止出现,下标小的元素 掩盖 需要移动的 下标大的元素的值
for(int j = nums.length-1-k; j >= 0; j--){
nums[k+j] = nums[j] ;
}
//拼接出移动的数组
for(int t = 0; t<k ; t++ ){
nums[t] = temp[t];
}
return nums;
}
public static void main(String[] args) {
int[] nums = rotate(new int[]{1, 2, 3, 4, 5, 6, 7},3);
for (int i =0 ; i < nums.length; i++){
System.out.println("nums"+nums[i]);
}
}
}