方法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)