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();
    }
}
LeetCode-Heap-215-M: 数组中的第K个最大元素LeetCode-Heap-215-M: 数组中的第K个最大元素 Heroin X 发布了74 篇原创文章 · 获赞 16 · 访问量 1801 私信 关注
上一篇:C++ 解析Json——jsoncpp


下一篇:error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow