当前位置: 首页 > 后端技术 > Java

LeetCode-414-第三大数

时间:2023-04-01 14:08:18 Java

第三大数题目描述:给你一个非空数组,返回这个数组中的第三大数。如果不存在,则返回数组中的最大数字。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。方案一:使用优先队列首先初始化一个优先队列PriorityQueue为queue,然后遍历nums中的元素,遍历过程如下:如果当前元素已经在队列中,则跳过,否则加入当前元素到队列;如果队列中的元素个数大于3,则从队列中移除一个元素(溢出的元素是最小的)。遍历完成后,如果队列只有3个元素,取出队列中的第一个元素返回,即nums中第三大的元素;如果队列没有3个元素,则取出最后一个元素返回为在nums中最大的元素并返回。importjava.util.PriorityQueue;/***@Author:ck*@Date:2021/9/298:08pm*/publicclassLeetCode_414{/***使用优先级队列**@paramnums*@return*/publicstaticintthirdMax(int[]nums){PriorityQueuequeue=newPriorityQueue(3);for(intnum:nums){//过滤掉重复元素if(!queue.contains(num)){queue.add(num);}//因为获取的是第三大元素,当队列中的元素个数超过3时,需要取出当前最小的元素if(queue.size()>3){queue.poll();}}if(queue.size()==3){//当队列只有3个元素时,最小的为第三大元素returnqueue.peek();}else{//当队列中的元素个数小于3时,遍历队列,取最大的一个intmax=-1;while(!queue.isEmpty()){max=queue.poll();}返回最大值;}}publicstaticvoidmain(String[]args){int[]nums=newint[]{1,2,2,5,3,5};System.out.println(thirdMax(nums));}}【每日留言】生命的意义在于能否在燃烧自己的同时点亮自己