力扣189题---轮转数组
给你一个数组,将数组中的元素向右轮转 k个位置,其中k是非负数。
示例 1:
输入: nums = [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:
输入:nums = [-1,-100,3,99], k = 2
输出:[3,99,-1,-100]
解释:
向右轮转 1 步: [99,-1,-100,3]
向右轮转 2 步: [3,99,-1,-100]
方法代码如下:
class Solution {
public void rotate(int[] nums, int k) {
int len = nums.length;
k= k % len;
int[] array = new int[len];
int j = 0;
for (int i = len - k; i < len; i++) {
array[j] = nums[i];
j++;
}
j = k;
for (int i = 0; i < len - k; i++) {
array[j] = nums[i];
j++;
}
for (int i = 0; i < len; i++) {
nums[i] =array[i];
}
}
}
IDEA验证:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] nums = new int[]{1, 2, 3, 4, 5, 6, 7};
Main solution = new Main();
solution.rotate(nums, 3);
System.out.println(Arrays.toString(nums));
}
public void rotate(int[] nums, int k) {
int len = nums.length;
k = k % len;
int[] array = new int[len];
int j = 0;
for (int i = len - k; i < len; i++) {
array[j] = nums[i];
j++;
}
j = k;
for (int i = 0; i < len - k; i++) {
array[j] = nums[i];
j++;
}
for (int i = 0; i < len; i++) {
nums[i] = array[i];
}
}
}
输出:[5, 6, 7, 1, 2, 3, 4]
精练的写法:
public void rotate(int[] nums, int k) {
int len = nums.length;
int[] array = new int[len];
//把原数组值放到一个临时数组中,
for (int i = 0; i < len; i++) {
array[i] = nums[i];
}
//然后在把临时数组的值重新放到原数组,并且往右移动k位
for (int i = 0; i < len; i++) {
nums[(i + k) % len] = array[i];
}
}
测试
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] nums = new int[]{1, 2, 3, 4, 5, 6, 7};
Main solution = new Main();
solution.rotate(nums, 3);
System.out.println(Arrays.toString(nums));
}
public void rotate(int[] nums, int k) {
int len = nums.length;
int[] array = new int[len];
//把原数组值放到一个临时数组中,
for (int i = 0; i < len; i++) {
array[i] = nums[i];
}
//然后在把临时数组的值重新放到原数组,并且往右移动k位
for (int i = 0; i < len; i++) {
nums[(i + k) % len] = array[i];
}
}
}
输出:[5, 6, 7, 1, 2, 3, 4]