📜  向左旋转 k 个单元格 java (1)

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

向左旋转 k 个单元格

在实际的应用程序中,我们常常需要对数组进行旋转操作。在这个问题中,我们需要向左旋转一个给定数组 k 个步骤。

例如,当 k = 3 时,数组 [1,2,3,4,5,6,7] 经过旋转后变成 [4,5,6,7,1,2,3]

下面是一个演示向左旋转数组的 Java 代码:

public static void rotate(int[] nums, int k) {
    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--;
    }
}

该函数接受两个参数:一个整数数组 nums 和一个整数 k,表示需要将数组向左旋转的步骤数。该函数首先将 k 取模以确保它小于数组长度,然后依次执行三个逆转操作来实现数组的旋转:

  1. 将整个数组逆转。
  2. 将前 k 个元素逆转。
  3. 将剩余的部分逆转。

在这个算法中,我们使用一个辅助函数 reverse() 来逆转一部分数组。该函数使用两个指针来交换数组中的元素,直到它们越过中间点。我们可以使用这个函数来完成整个数组的逆转和部分数组的逆转。

下面是一个使用示例:

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

该示例在执行完向左旋转操作后,输出的结果应该是 [4,5,6,7,1,2,3]

通过这个算法,我们可以快速将数组向左旋转 k 个步骤,同时具有一定的时间和空间效率。如果你在实际应用中需要对数组进行旋转操作,那么这个方法可能非常有用。