LeetCode-Heap-215-M: 数组中的第K个最大元素


在未排序的数组中找到第 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();
    }
}
发布了77 篇原创文章 · 获赞 16 · 访问量 1895

猜你喜欢

转载自blog.csdn.net/Xjheroin/article/details/104109129
今日推荐