【问题标题】:Sorting 2-D array in descending order using lambda expression使用 lambda 表达式按降序对二维数组进行排序
【发布时间】:2017-02-08 23:38:45
【问题描述】:

我正在处理一些面试问题并遇到了这个问题。我完全理解了代码,除了下一行的作用:

Arrays.sort(pair, (a, b) -> (b[0] - a[0]));

给定N名运动员的分数,找出他们的相对排名以及得分最高的前三名的人,他们将获得奖牌:“金牌”、“银牌”和“铜牌” .

示例 1:输入:[5, 4, 3, 2, 1] 输出:["Gold Medal", "Silver 奖牌”、“铜牌”、“4”、“5”]解释:前三名 运动员获得了前三名的最高分,因此获得了“金牌”, “银奖”和“铜奖”。对于左边的两名运动员,你 只需要根据他们的分数输出他们的相对排名。

 public class Solution {

   public String[] findRelativeRanks(int[] nums) {

        int[][] pair = new int[nums.length][2];

        for (int i = 0; i < nums.length; i++) {
            pair[i][0] = nums[i];
            pair[i][1] = i;
        }

        Arrays.sort(pair, (a, b) -> (b[0] - a[0]));

        String[] result = new String[nums.length];

        for (int i = 0; i < nums.length; i++) {
            if (i == 0) {
                result[pair[i][1]] = "Gold Medal";
            }
            else if (i == 1) {
                result[pair[i][1]] = "Silver Medal";
            }
            else if (i == 2) {
                result[pair[i][1]] = "Bronze Medal";
            }
            else {
                result[pair[i][1]] = (i + 1) + "";
            }
        }

        return result;
    }
}

【问题讨论】:

    标签: java arrays algorithm lambda


    【解决方案1】:

    这是调用Arrays.sort 方法,使用用lambda 表达式定义的Comparator 对数组pair 进行排序。只要类型推断可以确定我们需要一个只需要定义一个函数的类的对象,就可以使用 lambda 表达式。

    有关语法的更多信息,请参阅http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html#section2

    在后台,该函数将被多次调用,并使用数组中的元素对,并根据比较函数从“最小”到“最大”排序。如果函数返回一个负数,那么a 将被认为比b“大”,如果它返回一个正数,那么ab“小”,如果0 那么它是领带。

    这里的技巧是比较函数返回b[0] - a[0],这与通常的方向相反。因此,它将按从大到小排序。最大的当然是金牌得主。其次是银牌,然后是铜牌。

    【讨论】:

    • Java 如何知道他们正在比较第一列而不是第二列,以及第二列是否“遵循”第一列的顺序。另外,a 和 b 是什么意思,b 是迭代中的下一项吗?感谢您的回答
    • @RodrigoProença 该函数接受数组中的 2 个元素。您的 lambda 表达式以 (a, b) -&gt; ... 开头的事实将它们命名为 ab。数组中内容的结构取决于您如何构建它。
    • @btilly 这里是不是应该颠倒过来?如果 lambda body 是 (a[0] - b[0]),If the function returns a negative number, then a will be considered "larger" than b,它会“更小”吗?
    猜你喜欢
    • 2021-12-06
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    • 2016-07-22
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    相关资源
    最近更新 更多