gpt4 book ai didi

java - 将 4 个排序数组合并为一个

转载 作者:行者123 更新时间:2023-12-02 15:52:18 24 4
gpt4 key购买 nike

我有这个方法可以将 2 个排序的数组合并成一个排序的数组:

    public void merge(T[] a, int l1, int r1, T[] b, int l2, int r2, T[] c, int l3) {
while (l1 < r1 && l2 < r2) {
if (a[l1].compareTo(b[l2]) < 0) {
c[l3++] = a[l1++];
} else
c[l3++] = b[l2++];
}

while (l1 < r1)
c[l3++] = a[l1++];
while (l2 < r2)
c[l3++] = b[l2++];
}

但现在我想用 4 arrays 一次完成。

我尝试了很长时间来想出一个解决方案,但并没有真正成功。有人知道怎么做吗?

最佳答案

使用 Java8 流有一种比手动执行此操作更简单的方法:

  1. 将所有数组合并为一个流(我使用了 2 个,但您可以使用任意多个):
int[] arr1 = {1, 7, 10};
int[] arr2 = {1, 2, 4, 9};

Stream<int[]> ints = Stream.of(arr1, arr2);
  1. 然后 flatMap 并在流中排序它们:
IntStream intStream = ints.flatMapToInt(Arrays::stream).sorted();

当您打印它们时,您会看到所有排序的数字:

intStream.forEach(System.out::println);

1
1
2
4
7
9
10

结合在一个函数中,它看起来像这样:

public int[] merge(int[]... arrays) {
return Stream.of(arrays)
.flatMapToInt(Arrays::stream)
.sorted()
.toArray();
}

编辑:流的优点是,您可以根据需要进一步修改值。例如通过利用 distinct 函数,您可以轻松删除重复项:

intStream = intStream.distinct();
intStream.forEach(System.out::println);

1
2
4
7
9
10

关于java - 将 4 个排序数组合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72177195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com