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旋转数组的主要内容,如果未能解决你的问题,请参考以下文章

leetcode189旋转数组

Leetcode 189.旋转数组 By Python

LeetCode 189 Rotate Array(旋转数组)

旋转数组leetcode 189

LeetCode 189 旋转数组

LeetCode:189. 旋转数组