Leetcode 506: Relative Ranks

问题描述:
在这里插入图片描述
解释说明:按照奥运会颁奖规则,从第一名开始以此为:金牌,银牌,铜牌,第四名,第五名。。。。返回一个数组,对应原数组运动员分数所对应的名次

涉及排序,考虑用优先队列。优先队列有不同的用法,这里我介绍一种新学到的方法–lambda 表达式法
lambda表达式可以在优先队列的comparator中表示排序的依据
例如: (o1,o2)->(o1,o2) 相当于没写,即默认的从小到大的排序, poll()每次弹出队列里面最小的元素
(o1,o2)->(o2,o1)相当于逆序,即从大到小排序,poll()每次弹出队列里面最大的元素
(o1,o2)->(score[o2], score[o1]) 表示o1,o2的排序原则不依据o1,o2本身的大小,而是根据他们在另外一个数组中作为数组下标所对应的数组元素值而从大到小排序。举例说明:score=[10,3,8,9,4], queue里面有(3,4)两个元素,比较3,4时,并不是直接比较字面上的3,4,而是3,4作为数组下标,在score里面找对应的9,4,因为score[3]>score[4], 所以3>4

代码如下:

class Solution {
    public String[] findRelativeRanks(int[] score) {
        PriorityQueue<Integer> queue=new PriorityQueue<>((o1,o2)->(score[o2]-score[o1]));
        for(int i=0; i<score.length; i++){
            queue.add(i);
        }
        String[] ans=new String[score.length];
        for(int i=0; i<score.length; i++){
            if(i==0){
                ans[queue.poll()]="Gold Medal";
            }
            else if(i==1){
                ans[queue.poll()]="Silver Medal";
            }
            else if(i==2){
                ans[queue.poll()]="Bronze Medal";
            }
            else{
                ans[queue.poll()]=Integer.toString(i+1);
            }
        }
        return ans;
    }
}

时间复杂度:O(nlogn)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值