gpt4 book ai didi

java - java中排序数组包含一些数组

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

我有一个数组,其中包含数组。我需要编写一个函数,对大数组上的小数组进行排序(我的意思是,小数组的最小和是索引 0 上的第一个,在索引 1 上的第二个之后,以及 in 中的小数组的最大和大数组末尾 =index bigArray.length-1

如何对包含数组的数组进行排序?我需要在没有任何物体或类似的东西的情况下做到这一点。只是常规且简单的代码。 enter image description here

public static int [][] sum (int [][] arr) {

int sum=0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {

sum=sum+arr[i][j];

}

最佳答案

由于对内部数组求和是一个相对耗时的过程,并且排序时多次需要求和值,因此您应该创建一个对象来保存数组和求和,例如

static class ArraySum implements Comparable<ArraySum> {
final int[] array;
final int sum;
ArraySum(int[] array) {
this.array = array;
this.sum = Arrays.stream(array).sum();
}
@Override
public int compareTo(ArraySum that) {
return Integer.compare(this.sum, that.sum);
}
}

由于它是Comparable,因此您可以直接对其进行排序,因此有了它,您就可以使用 Java 8+ 流轻松对外部数组进行排序:

public static int[][] sort(int[][] arr) {
return Arrays.stream(arr).map(ArraySum::new).sorted()
.map(a -> a.array).toArray(int[][]::new);
}

这不会对输入的二维数组进行排序,而是返回一个新的二维数组,即一个新的外部数组,其中原始内部数组已排序。

测试

int[][] arr = { { 3, 5, 4 }, { 4, 3, 1, 2 }, { 5, 6 } };
int[][] arr2 = sort(arr);
System.out.println(Arrays.deepToString(arr));
System.out.println(Arrays.deepToString(arr2));

输出

[[3, 5, 4], [4, 3, 1, 2], [5, 6]]
[[4, 3, 1, 2], [5, 6], [3, 5, 4]]
// 10 11 12 sum

如您所见,原始二维数组未修改,新数组按内部数组之和排序。

关于java - java中排序数组包含一些数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56245411/

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