給定整數數組?
nums
?和整數?k
,請返回數組中第?k
?個最大的元素。請注意,你需要找的是數組排序后的第?
k
?個最大的元素,而不是第?k
?個不同的元素。輸入:[3,2,1,5,6,4] 和
k = 2 輸出: 5
? ? ? ?提到數組中最大元素,我們往往想到就是先給數組進行排序,然后取最大值,現在我們按照這個思路寫一寫代碼
- 首先判斷入參是否合法
f (nums == null || nums.length == 0) {return 0;}
- 然后對數組進行排序
Arrays.sort(nums);//默認排序方法時雙基準快排,效率較高
- 因為我們取的是第k個最大的元素
? ? ? ? 因為數組的長度是6,而k是2,我們所需要求的值的索引剛好是4,所以我們可以得出我們所需要推出的值是nums.length-k(在做題的過程中,如果需要確定關系式的這種情況,個人建議還是舉出例子,然后親自推導比較好一點)
return nums[nums.length - k];
? ? ? ?接下來,提到最大值,大家還能想到什么方法?是不是有種數據結構,特能自動的為我們進行數值的排序,不錯,就是優先隊列 ,我們可以先將數組中的元素都往優先隊列中塞進去,然后poll k次就是我們所需要的值,我們直接上代碼
public int findKthLargest(int[] nums, int k) {if(nums==null||nums.length==0){return 0;}//對比較器進行重寫,從大到小,因為PriorityQueue的默認排序時升序排序PriorityQueue<Integer> queue=new PriorityQueue<>((a,b)->{return b -a;});for(int num:nums){queue.offer(num);}int res=0;while(k>0){res=queue.poll();k--;}return res;}