📜  数组旋转的Java程序(1)

📅  最后修改于: 2023-12-03 14:55:00.798000             🧑  作者: Mango

数组旋转的Java程序

在Java中,数组旋转是非常常见的操作,特别是在算法和数据结构问题中。在本文中,我们将介绍如何在Java中实现数组旋转的简单方法。

方法一:暴力循环法

暴力循环法是最直观、最基本的一种数组旋转方法。它的思路是将数组的后K个元素移到数组的前面。这个过程需要遍历整个数组,并需要一个临时数组用于存储后面的K个元素。

这是一个Java实现暴力循环法的程序代码片段:

public static void rotate(int[] nums, int k) {
    int[] temp = new int[k];
    for (int i = nums.length - k, j = 0; i < nums.length; i++, j++) {
        temp[j] = nums[i];
    }
    for (int i = nums.length - k - 1; i >= 0; i--) {
        nums[i + k] = nums[i];
    }
    for (int i = 0; i < k; i++) {
        nums[i] = temp[i];
    }
}
方法二:反转法

反转法是另外一种实现数组旋转的方法。它的思路是先将整个数组反转,再将前K个元素和后面的元素分别反转。这种方法不需要额外的空间,时间复杂度为O(n)。

这是一个Java实现反转法的程序代码片段:

public static void rotate(int[] nums, int k) {
    k %= nums.length;
    reverse(nums, 0, nums.length - 1);
    reverse(nums, 0, k - 1);
    reverse(nums, k, nums.length - 1);
}

private 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--;
    }
}
总结

无论是使用暴力循环法还是反转法,都可以实现数组的旋转。暴力循环法需要额外的空间存储,时间复杂度为O(n),而反转法不需要额外的空间,时间复杂度同样为O(n)。实际使用中,根据具体情况选择使用哪种方法,以达到最好的效果。