文章目录
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
思路
(1)在不考虑堆的情况下,冒泡排序。效果很差。
解法1-冒泡
执行用时 :196 ms, 在所有 Java 提交中击败了5.03%的用户
内存消耗 :37.8 MB, 在所有 Java 提交中击败了46.47%的用户
class Solution {
public int findKthLargest(int[] nums, int k) {
for(int i=0;i<nums.length;i++){
for(int j=0;j<nums.length-1-i;j++){
if(nums[j] > nums[j+1]){
int temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
return nums[nums.length-k];
}
}
解法2-Arrays.sort()
执行用时 :3 ms, 在所有 Java 提交中击败了78.58%的用户
内存消耗 :38.4 MB, 在所有 Java 提交中击败了12.58%的用户
class Solution {
public int findKthLargest(int[] nums, int k) {
Arrays.sort(nums);
return nums[nums.length-k];
}
}
解法3-堆
class Solution {
public int findKthLargest(int[] nums, int k) {
PriorityQueue<Integer> heap = new PriorityQueue<>();
for(int n: nums){
heap.add(n);
if(heap.size()>k){
heap.poll();
}
}
return heap.poll();
}
}
Heroin X
发布了74 篇原创文章 · 获赞 16 · 访问量 1801
私信
关注