📜  Java程序在数组的左侧隔离 0 和在右侧隔离 1(1)

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

Java程序在数组的左侧隔离0和在右侧隔离1

在Java程序中,我们有时需要将一个数组中的所有0移到左侧,所有1移到右侧。这种操作可以用来对数组进行排序和预处理。在本文中,我们将介绍如何在Java程序中实现这种操作。

算法原理

这种操作的算法原理是双指针。我们从数组的两端开始,左指针指向数组的第一个元素,右指针指向数组的最后一个元素。然后我们向左移动左指针,向右移动右指针,每当我们遇到一个0或者1时,就交换这两个元素的位置,直到左指针指向了右指针的位置。

代码实现

下面是Java代码的实现:

public static void segregate(int[] arr) {
    int left = 0, right = arr.length - 1;

    while (left < right) {
        // 找到第一个不是0的元素
        while (arr[left] == 0 && left < right) left++;

        // 找到第一个不是1的元素
        while (arr[right] == 1 && left < right) right--;

        // 交换元素
        if (left < right) {
            arr[left] = 0;
            arr[right] = 1;
        }
    }
}

这段代码可以将一个数组中的所有0移到左侧,所有1移到右侧。

测试样例

下面是一组测试样例:

int[] arr = {0, 1, 0, 1, 1, 0, 1, 0};
segregate(arr);
System.out.println(Arrays.toString(arr));

输出结果为:

[0, 0, 0, 0, 1, 1, 1, 1]
总结

在本文中,我们介绍了如何将一个数组中的所有0移到左侧,所有1移到右侧。我们使用了双指针算法,从数组的两端开始,向中间移动指针,并交换元素的位置。在实际应用中,这种操作可以用来对数组进行排序和预处理。