标签:queue Ranks Relative score ans 506 poll o2 o1
问题描述:
解释说明:按照奥运会颁奖规则,从第一名开始以此为:金牌,银牌,铜牌,第四名,第五名。。。。返回一个数组,对应原数组运动员分数所对应的名次
涉及排序,考虑用优先队列。优先队列有不同的用法,这里我介绍一种新学到的方法–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)
标签:queue,Ranks,Relative,score,ans,506,poll,o2,o1 来源: https://blog.csdn.net/weixin_51401145/article/details/118724600
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。