📅  最后修改于: 2023-12-03 15:16:37.657000             🧑  作者: Mango
在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移到右侧。我们使用了双指针算法,从数组的两端开始,向中间移动指针,并交换元素的位置。在实际应用中,这种操作可以用来对数组进行排序和预处理。