剑指 Offer II 堆
059. 数据流的第 K 大数值
class KthLargest {
public:
priority_queue<int,vector<int>,greater<int>>heap;//小根堆 维护第1大到第k大的数 top就是第k大的数
int k;//太妙了
/*
第n大 n-1 n-2 ... k   k-1 k-2 ... 第1大
如果加的数小于a[k]  它将被弹走
         大          k是第k+1大的 把k弹出去
*/
    KthLargest(int _k, vector<int>& nums) {
        k=_k;
        for(auto x:nums)
        {
            heap.push(x);
            if(heap.size()>k)heap.pop();
        }
    }
    int add(int val) {
         heap.push(val);
            if(heap.size()>k)heap.pop();
            return heap.top();
    }
};
060. 出现频率最高的 k 个数字
class Solution {
public:
/*
计数排序
因为最多出现n次 拿一个数组存 出现i次元素的有多少个
*/
    vector<int> topKFrequent(vector<int>& nums, int k) {
        unordered_map<int,int>cnt;//每个元素出现了多少次
        int n=nums.size();
         vector<int>ans;
        vector<int>f(n+1);
        for(auto x:nums)cnt[x]++;
        for(auto [x,c]: cnt)f[c]++;
        int i=n;
        while(k>0)k-=f[i--];
        for(auto [x,c]:cnt)
        if(c>i)ans.push_back(x);
        return ans;
    }
};
061. 和最小的 k 个数对
class Solution {
    typedef vector<int> VI;
    /*
多路归并
b0+a0  b0+a1 +... + a[n-1]
b1
.
.
.
b[m-1]
优先队列 存vector<int>  不是int
    */
public:
    vector<vector<int>> kSmallestPairs(vector<int>& a, vector<int>& b, int k) {
        priority_queue<VI,vector<VI>,greater<VI>>heap;
         vector<VI>ans;
         int n=a.size(),m=b.size();
         for(int i=0;i<m;i++)heap.push({b[i]+a[0],0,i});
         // b[i]+a[0]用于比较
         //0是a下标 i是b下标 用于传答案 
         while(heap.size()&&k)
         {
             k--;
             VI t=heap.top();
             heap.pop();
             ans.push_back({a[t[1]],b[t[2]]});
             if(t[1]+1<n)heap.push({a[t[1]+1]+b[t[2]],t[1]+1,t[2]});
         }
        return ans;
    }
};
												
											剑指 Offer II 堆的更多相关文章
- 剑指Offer——简述堆和栈的区别
		
剑指Offer--简述堆和栈的区别 堆(Heap) Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建: Java虚拟机规范描述:所有的对象实例及数组都要在堆上分配: Java堆可以处于物理 ...
 - 刷题-力扣-剑指 Offer II 055. 二叉搜索树迭代器
		
剑指 Offer II 055. 二叉搜索树迭代器 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/kTOapQ 著作权归领扣网络所有 ...
 - 【剑指 Offer II 001. 整数除法】同leedcode 29.两数相除
		
剑指 Offer II 001. 整数除法 解题思路 在计算的时候将负数转化为正数,对于32位整数而言,最小的正数是-2^31, 将其转化为正数是2^31,导致溢出.因此将正数转化为负数不会导致溢出. ...
 - 剑指Offer——II平衡二叉树
		
class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None # 这道题使用中序遍历加上 ...
 - 【力扣】剑指 Offer II 092. 翻转字符
		
题目 解题思路 一个很暴力的想法,在满足单调递增的前提下,使每一位分别取 1 或 0,去看看哪个结果小. 递归函数定义int dp(StringBuilder sb, int ind, int pre ...
 - 剑指Offer——迅雷笔试题+知识点总结
		
剑指Offer--迅雷笔试题+知识点总结 情景回顾 时间:2016.9.19 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:迅雷笔试 总体来说,迅雷笔试内容体量不算多,主要 ...
 - 《剑指offer》内容总结
		
(1)剑指Offer——Trie树(字典树) Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种.典型应用是统计和排序大量的字符串(但不仅限于字符串),所以经常 ...
 - 剑指offer从上往下打印二叉树 、leetcode102. Binary Tree Level Order Traversal(即剑指把二叉树打印成多行、层序打印)、107. Binary Tree Level Order Traversal II 、103. Binary Tree Zigzag Level Order Traversal(剑指之字型打印)
		
从上往下打印二叉树这个是不分行的,用一个队列就可以实现 class Solution { public: vector<int> PrintFromTopToBottom(TreeNode ...
 - 学会从后往前遍历,例 [LeetCode] Pascal's Triangle II,剑指Offer 题4
		
当我们需要改变数组的值时,如果从前往后遍历,有时会带来很多麻烦,比如需要插入值,导致数组平移,或者新的值覆盖了旧有的值,但旧有的值依然需要被使用.这种情况下,有时仅仅改变一下数组的遍历方向,就会避免这 ...
 - [简单-剑指 Offer 53 - II. 0~n-1中缺失的数字]
		
[简单-剑指 Offer 53 - II. 0-n-1中缺失的数字] 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一 ...
 
随机推荐
- 企业级GitLab在Docker部署使用
			
一.部署gitlab 这里使用的是Centos8,安装Docker环境 ,这里不说了,参考:https://www.cnblogs.com/wei325/p/15139701.html gitlab有 ...
 - Javaweb-Tomcat(安装+配置环境)
			
Tomcat跟着教程,但是在bin目录下点击startup只能闪退的总结 1.先下载 直接搜tomcat下载就可以了(free) 2.解压到你想要的文件中 3.直接进入bin目录,找startup.b ...
 - 2.3.pages.json文件的页面配置与全局配置
			
新建页面 # pages uni-app 通过 pages 节点配置应用由哪些页面组成,pages 节点接收一个数组,数组每个项都是一个对象,其属性值如下: 属性 类型 默认值 描述 path Str ...
 - 【KAWAKO】Pydub-某些函数的使用方法
			
目录 EQ 源码 其中使用的_eq函数源码 测试代码 EQ 源码 seg:AudioSegment音频 focus_freq:需要调整的中心频率 bandwidth:调整的频率范围 channel_m ...
 - 代码随想录算法训练营day18 | leetcode 513.找树左下角的值 ● 112. 路径总和  113.路径总和ii ● 106.从中序与后序遍历序列构造二叉树
			
LeetCode 513.找树左下角的值 分析1.0 二叉树的 最底层 最左边 节点的值,层序遍历获取最后一层首个节点值,记录每一层的首个节点,当没有下一层时,返回这个节点 class Solutio ...
 - 操作系统复习(updating)
			
操作系统复习(updating) 1.进程和线程的区别是什么? 1)调度:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位 2)拥有资源:不论是传统操作系统还是设有线程的操作系 ...
 - 优化 Win11 资源管理器打开文件夹速度
			
打开"高级系统设置",点击"性能"设置,性能选项中勾选如上图选中的项,可以一定程度上提升 Win11 资源管理器打开文件夹的速度: "窗口内动画控件和 ...
 - [NepCTF2022]signin
			
signin 题目 from Crypto.Util.number import getStrongPrime,bytes_to_long from gmpy2 import powmod,is_pr ...
 - 基于线程的并行-Python 并行编程学习笔记(一)
			
前言 最近写一些模拟集群智能的算法,虽然机制简单,但是随着个体的增加,设计的计算量就比较大了,尤其是加上matplotlib进行动态展示,使得运算量骤增,看着画面也比较卡.之前想把算法转化成c++代码 ...
 - centOS 相关运维指令
			
1.检查CPU信息: cat /proc/cpuinfo lscpu 2.top输入 top 命令,然后可以再按 m 切换显示内容 其中 KiB Mem 行为物理内存情况,单位为KB 3.free - ...