zoukankan      html  css  js  c++  java
  • leetcode 215 第K个最大的元素

    此问题可转化为Top K问题进行考虑,当用小顶堆选出K个最大值时,堆顶的元素即为第k大的元素

    class Solution {
    public:
        int findKthLargest(vector<int>& nums, int k) {
            priority_queue<int,vector<int>,greater<int> >q;//小顶堆
            //priority_queue<int,vector<int>,less<int> >q;大顶堆
            int len=nums.size();
            for(int i=0;i<len;i++){
                if(i<k)
                    q.push(nums[i]);
                else{
                    if(q.top()<nums[i]){
                        q.pop();
                        q.push(nums[i]);
                    }
                }
            }
            return q.top();
        }
    };

     自己重载比较运算符:

    /**
    建立一个小顶堆,每次出现新元素大于堆顶元素则替换堆顶元素
    **/
    class Solution {
    public:
        int findKthLargest(vector<int>& nums, int k) {
            vector<int> topk;
            struct cmp{
                bool operator()(int a,int b){return a>b;}//小顶堆
            };
            priority_queue<int,vector<int>,cmp> q;
            for(int num:nums){
                if(q.size()<k){
                    q.push(num);continue;
                }
                if(num>q.top()){
                    q.pop();q.push(num);
                }
            }
            return q.top();
        }
    };
  • 相关阅读:
    easyui
    mvc
    Servlet简单计算器 2.0
    简易Servlet计算器1.0
    javaBean 练习—封装学生信息
    application和javaBean练习
    远程存储程序
    通讯录
    黑名单管理代码总结
    DAO
  • 原文地址:https://www.cnblogs.com/joelwang/p/10640651.html
Copyright © 2011-2022 走看看