📌  相关文章
📜  用于数组右旋转的反转算法的Java程序(1)

📅  最后修改于: 2023-12-03 15:40:54.028000             🧑  作者: Mango

用于数组右旋转的反转算法的Java程序

在Java中,我们可以使用反转算法来对数组进行右旋转操作。反转算法是一种简单而有效的方法,其复杂度为O(n)。这个算法的思路是先将整个数组反转,再将前k个元素和后n-k个元素分别反转一次即可实现右旋转操作。

下面是示例代码:

public class RotateArray {
    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--;
        }
    }

    public static void main(String[] args) {
        int[] nums = {1, 2, 3, 4, 5, 6, 7};
        int k = 3;
        rotate(nums, k);
        System.out.println(Arrays.toString(nums));
    }
}

在这段代码中,我们定义了一个rotate方法,它接受一个数组nums和一个整数k作为参数,表示需要将数组右旋转k次。为了避免k大于数组长度的情况,我们对k进行取余处理。

接着,我们调用了reverse方法三次。第一次将整个数组反转,第二次将前k个元素反转,第三次将后n-k个元素反转。reverse方法实现了数组反转,它接受一个数组nums、起始位置start和结束位置end作为参数。在方法中,我们使用while循环来交换start和end位置上的元素。

最后,我们在main方法中测试了我们的rotate方法。我们创建了一个长度为7的数组,将它右旋转了3次,然后将结果打印出来。输出结果为:[5, 6, 7, 1, 2, 3, 4]。

这段代码非常简单,易于理解,而且时间复杂度为O(n),是一种非常高效的算法。如果你需要对数组进行右旋转操作,不妨试试这个方法。