leetcode189旋转数组
Posted lisin-lee-cooper
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode189旋转数组相关的知识,希望对你有一定的参考价值。
一.问题描述
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
进阶:
尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。
你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?
示例 1:
输入: nums = [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]
二.示例代码
public class RotateArray189 {
public static void main(String[] args) {
int[] array = new int[]{1, 2, 3, 4, 5, 6, 7};
int k = 3;
rotateArray3(array, k);
for (int num : array) {
System.out.println(num);
}
}
private static void rotateArray(int[] array, int k) {
for (int i = 0; i < k; i++) {
int temp = array[array.length - 1];
for (int j = array.length - 1; j > 0 && i < k; j--) {
array[j] = array[j - 1];
}
array[0] = temp;
}
}
public static void rotateArray2(int[] nums, int k) {
int len = nums.length;
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) {
while (start < end) {
int temp = nums[start];
nums[start] = nums[end];
nums[end] = temp;
start++;
end--;
}
}
public static void rotateArray3(int[] nums, int k) {
int[] newArr = new int[nums.length];
for (int i = 0; i < nums.length; i++) {
newArr[(i + k) % (nums.length)] = nums[i];
}
System.arraycopy(newArr, 0, nums, 0, nums.length);
}
}
以上是关于leetcode189旋转数组的主要内容,如果未能解决你的问题,请参考以下文章