当前位置: 首页 > 知识库问答 >
问题:

根据 arr[i] 的总和从低到高对二维 int 数组进行排序

贾成天
2023-03-14

我在对整数二维数组进行排序的作业中陷入了死胡同。

这些指令将创建一个接受二维int数组(不一定是矩阵)的函数,并根据内部数组的总和对外部数组进行排序。换句话说,在数组的第一个索引中应该是具有最低总和的内部数组。

Example - input - int[][] array = {{2,4,1,9,9,9,9},{6,8},{7,3,6,5,1 } };

输出数组={{6,8},{7,3,6,5,1},}2,4,1,9,9,9,9}};

到目前为止,我的逻辑是创建一个新的一维数组,其中包含主数组中每个内部数组的总和。并根据它进行排序。

public static int[] arraysCalculator(int[][] arr) { 
int[] sums = new int[arr.length];
int sum= 0;
for(int i = 0; i  < arr.length; i++)
{
    for(int j = 0; j < arr[i].length; j++)
    {
        sum += arr[i][j];
    }
    sums[i] = sum;
    sum = 0;
}

共有3个答案

华欣荣
2023-03-14

除了其他在解释理论和为解决任务奠定基础方面做得很好的答案外,下面是一个完整的工作示例(包含每件事的具体内容和原因的详细文档),希望能对您有所帮助:

/**
 * This method will sort the inner arrays of a given two dimensional array
 * from lowest to highest value according to the sum of it's elements.
 */
private static int[][] arrayCalc(int[][] arr)
{
    /*
     * We're working with a TreeMap here because this type
     * of map is allowed to have duplicate key entries
     */
    java.util.Map<Integer, Integer[]> map = new java.util.TreeMap<>();
    /*
     * This value represents the largest inner array
     * size found in 2d array passed as parameter
     */
    int largestSize = 0;
    for (int[] inner : arr) {
        /*
         * Convert the inner array to an array of Integer
         * objects so it can be placed inside a map
         */
        Integer[] integers = IntStream.of(inner).boxed().toArray(Integer[]::new);
        map.put(IntStream.of(inner).sum(), integers);
        /*
         * Check if this inner array has a larger value
         * then the largest array we processed so far
         */
        if (inner.length > largestSize) {
            largestSize = inner.length;
        }
    }

    int[][] result = new int[map.size()][largestSize];
    /*
     * Iterate over the map and copy it's values which are represented
     * as Integer arrays into inner arrays of our return value
     */
    java.util.Iterator<java.util.Map.Entry<Integer, Integer[]>> iter = map.entrySet().iterator();
    for (int i = 0; i < result.length && iter.hasNext(); i++)
    {
        java.util.Map.Entry<Integer, Integer[]> entry = iter.next();
        /*
         * We can just return our value as an array of Integer objects
         * but for the sake of this exercise we will convert it to a
         * primitive 2D int array so it's consistent with our method parameter
         */
        Integer[] integers = entry.getValue();
        result[i] = java.util.Arrays.stream(integers).mapToInt(Integer::intValue).toArray();
    }
    return result;
}

public static void main(String[] args)
{
    int[][] array = {{2, 4, 1,9,9,9,9}, {6, 8}, {7, 3, 6, 5, 1}};
    int[][] result = arrayCalc(array);

    for (int[] iResult : result) {
        System.out.println(Arrays.toString(iResult));
    }
}

输出

[6, 8]
[7, 3, 6, 5, 1]
[2, 4, 1, 9, 9, 9, 9]
章高朗
2023-03-14

你有三分之一。您现在需要什么:

  • 在创建包含“内部”数组总和的第一个数组总和之后,只需创建该数组的精确副本,如originalSums
  • 然后,对sums的内容进行排序

例如:假设总和originalSumsare

原文摘要[ 12, 3, 7]

求和[3,7,12]

问题是:通过查看这两个数组,您可以决定如何交换内部数组,以匹配现在显示的顺序。

在上面的示例中,您注意到 12 的原始索引为 0。排序后,其索引为 2。所以你知道你必须“交换”内部数组为0和2。您还可以推断 3 应为索引 0,7 应为索引 2。

当然,确保交换成功仍然需要做一些工作(就像你最好不要交换任何索引两次一样)。

最基本的方法是一次只查看一个指数(就像你做某种冒泡排序一样)。

长话短说:有许多不同的方法来解决这个问题。我建议你从最简单的路径开始。

孙钱青
2023-03-14

您可以通过流式传输int[]然后调用sum()来轻松地对它求和[]。从那里开始,只需使用比较器来比较此总和来调用 Arrays.sort

Arrays.sort(array, Comparator.comparingInt(a -> Arrays.stream(a).sum()));
 类似资料:
  • 问题内容: 我将向您展示有关该问题的目的的示例。我之前拥有的数组以及排序后如何使用它: 之前: 之后: 我们在int矩阵中工作: 排序基于第二列Weight.Am,以查找对数据数组进行排序的过程。 我尝试了这个,但不幸的是我没有找到正确的泡菜排序方法。请问有帮助吗? 问题答案: 使用带有自定义。 作为shmosel 下文提到的,与Java 8中,您可以使用:

  • 我试图排序的hashmap的结构的值从高到低。 我在下面创建了一个函数来对数据进行排序。 我收到以下错误: 异常在线程"main"java.lang.ClassCastException:类java.lang.String不能转换为类java.lang.整数(java.lang.String和java.lang.整数在加载器'bootstrap'的模块java.base) 我相信我的错误是由上面的

  • 问题内容: 在Java中,我的数组中有一个数据,如下所示 我想根据第一列对其进行排序,所以我的最终数据可以像这样 第一列是格式为“ yyyy.MM.dd HH:mm”的日期,第二列是字符串。 问题答案: 根据一列 对二维数组进行排序第一列是日期格式为“ yyyy.MM.dd HH:mm”的日期,第二列是字符串。 因为您说的是二维数组,所以我假设“格式日期…”表示字符串。这是用于对String []

  • 问题内容: 我正在尝试根据内部数组中的特定值对我的PHP哈希表进行排序。数据结构如下所示: 我已经尝试过 ksort , sort , usort, 但是似乎没有任何作用。我正在尝试根据 名称键 向下两级进行排序。 这是我尝试使用usort的尝试: 有没有简单的方法可以做到这一点,或者我需要编写一个自定义排序功能? 问题答案: 思考,更有用和实用的 如何使用

  • 按列对数组进行排序,就像我想在这里对最后一行上的值进行排序一样,根据排序结果,同一行中其他列上的数字也可能会发生变化 例如

  • 我有一张叫‘宽床单’的桌子。这是一个班级学生所有学科总分的汇总之处。 通过此查询获得了每个主题的总数 并用此显示 而总体总数显示为 一切都很顺利,直到我不得不对表格进行排序,从总分最高到最低。表现在应该如下所示: 我真的被困住了。我从这里怎么走? 好吧,按照@titi的建议,我做了一个group_by查询,得出了这样的结果: 如果这是正确的,我如何显示它?