215. 數組中第K大的元素

方法1:直接排序

對數組直接進行排序後取倒數第k個值並是答案,這裏注意下k的值大於數組長度的時候的邊界條件。

//方法1:直接排序
class Solution {
    public int findKthLargest(int[] nums, int k) {    
        if(k-1>=nums.length || k-1<0){
            return -1;
        }
        Arrays.sort(nums);
        return nums[nums.length - k ];
    }
}

時間複雜度:O(N \log N)O(NlogN)
空間複雜度: O(1)O(1)

方法2: 優先隊列

用優先隊列維護一個大小爲k的小根堆,第k大的便爲堆頂元素

import java.util.*;

public class Solution {
    public int findKthLargest(int[] nums, int k) {
        PriorityQueue<Integer> pQueue = new PriorityQueue<>();
        for (int temp : nums){
            pQueue.add(temp);
            if(pQueue.size() > k){
                pQueue.poll();
            }
        }
        
        return pQueue.peek();
    }
}

時間複雜度 : O(N \log k)O(Nlogk)
空間複雜度 : O(k*k)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章