703. Kth Largest Element in a Stream/215. Kth Largest Element in an Array/

703 非常经典的一个题,假设有一个不断增加的序列,要求输出第K 大的数

int k = 3;
int[] arr = [4,5,8,2];
KthLargest kthLargest = new KthLargest(3, arr);
kthLargest.add(3);   // returns 4
kthLargest.add(5);   // returns 5
kthLargest.add(10);  // returns 5
kthLargest.add(9);   // returns 8
kthLargest.add(4);   // returns 8

举例: 假设有10000000个元素,假设求第5大的元素, 就是构建一个 size =5 的 “最小堆”,然后每次add 时都只add 比当前 堆里peek 大的值, 这样当PQ 填满时的peek 就是第5大的。
class KthLargest {

    Queue<Integer> pq ;
    int max_size;

    public KthLargest(int k, int[] nums) {

        pq = new PriorityQueue<>(k);
        max_size = k;
        for(int num: nums){
            this.add(num);  //调用成员函数的add
        }
    }

    public int add(int val) {
        if(pq.size() <max_size) pq.offer(val);

        else if(val >pq.peek()) {
           pq.offer(val);
           pq.poll();
        }

        return pq.peek();
    }
}

215 太简单了,就不说了。

class Solution {
    public int findKthLargest(int[] nums, int k) {

        Queue<Integer> max_heap = new PriorityQueue<>((o1,o2)->o2-o1);

        for(int num: nums){
            max_heap.add(num);
        }

        for(int i=1; i<k; i++){
            max_heap.poll();
        }
        return max_heap.peek();

    }
}

原文地址:https://www.cnblogs.com/keepAC/p/10269935.html

时间: 2024-10-07 19:50:05

703. Kth Largest Element in a Stream/215. Kth Largest Element in an Array/的相关文章

leetcode 703. Kth Largest Element in a Stream &amp; c++ priority_queue &amp; minHeap/maxHeap

703. Kth Largest Element in a Stream & c++ priority_queue & minHeap/maxHeap 相关链接 leetcode c++ priority_queue cplusplus c++ priority_queue cnblog 背景知识 ??堆是算法中常用的数据结构之一,其结构是完全二叉树,但实现的方法最常见的是使用数组:这里主要介绍小顶堆,其根元素最小,对于任何一个节点来说,他都比其后代要小:访问器根元素的时间为O(1):树的

LeetCode 703. Kth Largest Element in a Stream

原题链接在这里:https://leetcode.com/problems/kth-largest-element-in-a-stream/description/ 题目: Design a class to find the kth largest element in a stream. Note that it is the kth largest element in the sorted order, not the kth distinct element. Your KthLarg

leetcode Kth Largest Element in a Stream——要熟悉heapq使用

703. Kth Largest Element in a Stream Easy Design a class to find the kth largest element in a stream. Note that it is the kth largest element in the sorted order, not the kth distinct element. Your KthLargest class will have a constructor which accep

LeetCode OJ 215. Kth Largest Element in an Array 堆排序求解

题目链接:https://leetcode.com/problems/kth-largest-element-in-an-array/ 215. Kth Largest Element in an Array My Submissions Question Total Accepted: 43442 Total Submissions: 136063 Difficulty: Medium Find the kth largest element in an unsorted array. Not

网易2016 实习研发工程师 [编程题]寻找第K大 and leetcode 215. Kth Largest Element in an Array

传送门 有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数. 给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在. 测试样例: [1,3,5,2,2],5,3 返回:2 note: 注意手写快排的时候: while(i < j) { while(j > i && a[j] > a[left]) j--; while(i < j && a[i] <= a[left]) i++; if(i

Kth Largest Element in a Stream

Design a class to find the kth largest element in a stream. Note that it is the kth largest element in the sorted order, not the kth distinct element. Your KthLargest class will have a constructor which accepts an integer k and an integer array nums,

刷题215. Kth Largest Element in an Array

一.题目说明 题目215. Kth Largest Element in an Array,在一个无序数组中找第k大的元素.难度是Medium! 二.我的解答 这个题目最直观的解答是,先对数组排序,然后直接返回: class Solution{ public: int findKthLargest(vector<int>& nums,int k){ sort(nums.begin(),nums.end()); return nums[nums.size()-k]; } }; 性能如下:

LeetCode OJ 215. Kth Largest Element in an Array

Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element. For example,Given [3,2,1,5,6,4] and k = 2, return 5. Note: You may assume k is always valid, 1 ≤ k ≤ array's

703. Kth Largest Element in a Stream

https://leetcode.com/problems/kth-largest-element-in-a-stream/description/ class KthLargest { public: priority_queue<int> q; int k; KthLargest(int k, vector<int> nums) { this->k = k; for (auto &i : nums) add(i); } int add(int val) { if