剑指 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个数字中有且只有一 ...
随机推荐
- voxel体素网络滤波器
1.简介 在进行建图的时候,由于多个视角内存在视野重叠,即多个摄像头看到同样的像素点,这样在重叠区域内会存在大量的位置十分相近的点,这会占用很多内存空间.体素网络滤波保证了在某个一定大小的立方体内只有 ...
- 快速上手vue前端存储库、全局状态管理工具pinia
pinia是什么,为什么我们要使用pinia? pinia是vue全局状态管理工具,类似vueX,用于全局的数据状态存储.修改变更等等 相较于vueX,pinia的使用较为简单,轻量级,上手容易,干掉 ...
- MySQL索引的基本理解
之前一致以为索引就是简单的在原表的数据上加了一些编号,让查询更加快捷.后来发现里面还有更深的知识. 索引用于快速查找具有特定列值的行.如果没有索引,MySQL 必须从第一行开始,然后通读整个表以找到相 ...
- Optimum + ONNX Runtime: 更容易、更快地训练你的 Hugging Face 模型
介绍 基于语言.视觉和语音的 Transformer 模型越来越大,以支持终端用户复杂的多模态用例.增加模型大小直接影响训练这些模型所需的资源,并随着模型大小的增加而扩展它们.Hugging Face ...
- 【故障公告】Kubernetes 集群节点宕机造成博客站点故障
非常抱歉!今天 18:40-18:55 左右 Kubernetes 集群一台高配节点突然宕机,造成博客站点故障,访问时出现 502 Bad Gateway,由此给您带来麻烦麻烦,请您谅解. 发现故障并 ...
- 智能指针 shared_ptr weak_ptr shared_from_this 笔记
shared_ptr 当指向对象的std::shared_ptr一创建,被管理对象的控制块SharedPtrControlBlock(参考下面的图)就建立了. 被管理的对象的控制块中有引用计数(ref ...
- 使用expect在实现跨机器拿日志
1.shell脚本 config_file_path=$1 #集群的ip port=$2 #获取集群服务端口中的日志 sjc=$3 #时间戳 user_name="sdbadmin" ...
- vue常用插件集合(常用,但一般UI库又不太能满足)
# v-base-plugins ``` bash # install npm i v-base-plugins --save npm start #引入 import myPlugin fr ...
- vue node Failed at the iview-admin
npm ERR! iview-admin@1.3.1 dev: `webpack-dev-server --content-base ./ --open --inline --hot --compre ...
- 报错:cannot import name ‘escape’ from ‘jinja2’
jinja2版本问题导致 解决方法: 降低版本即可 pip3 install Jinja2==3.0.3 -U pip3 install werkzeug==2.0.3 -U jinja2介绍 jin ...