当前位置: 首页 > wzjs >正文

成都网站建设哪些公司好郑州搜索引擎优化

成都网站建设哪些公司好,郑州搜索引擎优化,电子商务网站开发报价,新手做网站用什么软件优先队列是一种相对高级的数据结构,它的底层原理是二叉堆。然而本篇不会执着于深挖其背后的原理,更主要的是理一下它在题目中的一些实用方法,帮助你更快的上手使用。 优先队列(priority_queue) 优先队列的特别之处就在于它可以自动进行排序&…

优先队列是一种相对高级的数据结构,它的底层原理是二叉堆。然而本篇不会执着于深挖其背后的原理,更主要的是理一下它在题目中的一些实用方法,帮助你更快的上手使用。

优先队列(priority_queue)

        优先队列的特别之处就在于它可以自动进行排序,很好的维护了整个序列内的单调性,比如一个初始的大顶堆:priority_queue<int>.它自顶向下是呈递减的, 也就是说它的堆顶的元素永远都是最大的。这可以非常方便的处理有关序列单调性的问题。如果想实现最小堆这样定义:priority_queue<int, vector<int>, greater<int>>。接下来就说一下具体使用方法和场景。

优先队列常用函数
q.push(val)将值压进去
q.emplace(val)创造一个值压进去
q.pop()将堆顶值弹出去
q.size()整个堆的大小
q.empty()判断堆是否为空

先看一个经典的题目:703. 数据流中的第 K 大元素 - 力扣(LeetCode)

        题目非常的好懂,就是不停的增加序列的个数,每次输出第K大的数字。由于数字不停的在增加,如果每次都进行排序那么略显浪费。但是我们的优先队列只能读取第一个元素。要想解决快速找到第K个,不妨先定义一个最小堆,控制堆的大小为K,这样堆顶就一直是这K个中最小的了。思路上进行了一个小转变,可以O(1)查到第K大的数字,非常的便捷。

Code:

class KthLargest {
public:priority_queue<int, vector<int>, greater<int>> Q;int k1;KthLargest(int k, vector<int>& v) {k1 = k;for (int num : v)add(num);}int add(int val) {Q.push(val);if (Q.size() > k1)Q.pop();return Q.top();}
};

 通过上面的大概讲解可以了解到:优先队列只能得到此时堆顶的值,但如果我们想找中间值的话就成了麻烦。此时就要介绍一个优先队列的衍生用法:对顶堆

名字听起来好像是一个什么新的东西,但其实就是把一个优先队列根据题目要求给分成两个优先队列,把题目中要找的那个位置给露出来。接下来用一道例题简单解释一下。

题目:106. 动态中位数 - AcWing题库

题目解析:本题题意也非常的好理解,就是当本序列元素个数为奇数的时候输出此时的中位数。我们都知道,中位数一定要是有序的,所以用优先队列毋庸置疑。但是问题就在于中位数它必须是中间那个数,我们该怎么取呢? 诶,这个时候我们的对顶堆就派上了用场:用一个最小堆维护前一半的序列,再用一个最大堆维护后面那一半。这样就把中位数露出来了。

直接看代码吧,注释写的相对详细:

// Problem: 动态中位数
// Contest: AcWing
// URL: https://www.acwing.com/problem/content/108/
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int, int>
#define fi first
#define se second 
#define endl '\n'
const int N = 1e6+5;
//1、多实例清变量!!!
//2、N范围变了没?
//3、是否开多实例?
//4、用字符串如果是两位数呢?
//5、没输入完不要退出!
priority_queue<int, vector<int>, greater<int>> Q;
priority_queue<int> q;
int n,m;
int a[N];
int x;
void solve()
{Q = priority_queue<int, vector<int>, greater<int>>();q = priority_queue<int>();vector<int> v;cin >> n >> m;cin >> x,q.push(x);v.push_back(q.top());//先将第一个数压进去for(int i=2; i<=m; i++){cin >> x;Q.push(x);//其实随便压一个就好了while(q.top()>Q.top())//保证Q整体是>=q的{int t=Q.top();Q.pop();Q.push(q.top());q.pop();q.push(t);}while(Q.size()>q.size())//调整大小,让q的大小始终比Q多一个{q.push(Q.top());Q.pop();}while(q.size()>Q.size()+1){Q.push(q.top());q.pop();}if(i%2==1)//当为奇数个的时候输出v.push_back(q.top());}cout << n << ' ' << m/2+1 << endl;int sum=0;for(auto i:v){cout << i << ' ';sum++;if(sum==10)//调整格式,保证一行最多10个{cout << endl;sum=0;}}if(sum!=0)cout << endl;v.clear();//清变量~
}
signed main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int t=1;cin >> t;while(t--) solve();return 0;
}

总得来说,优先队列由于其自动排序的特点使得它非常的好用,一般可以在O(n)~O(nlogn)之间解决问题。还有几道相关的题可以练习一下:

  • 264. 丑数 II - 力扣(LeetCode)
  • P1090 [NOIP 2004 提高组] 合并果子 - 洛谷
  • 506. 相对名次 - 力扣(LeetCode)

文章转载自:

http://NbD8YeyV.zLgrr.cn
http://PsEuxGid.zLgrr.cn
http://ftlC1UfH.zLgrr.cn
http://JbtVRDfH.zLgrr.cn
http://GlWUgPEh.zLgrr.cn
http://2CPWwm8b.zLgrr.cn
http://3TNCj6a3.zLgrr.cn
http://VzwE3Txe.zLgrr.cn
http://myHqF61j.zLgrr.cn
http://JkhlH7CU.zLgrr.cn
http://5PZldVW5.zLgrr.cn
http://2ObACYto.zLgrr.cn
http://zWtj82Sx.zLgrr.cn
http://uNoFv3Bh.zLgrr.cn
http://ZFZOAfPA.zLgrr.cn
http://CldRqKi6.zLgrr.cn
http://K6CdXgoP.zLgrr.cn
http://pyndoJ8P.zLgrr.cn
http://5qPzPmmg.zLgrr.cn
http://cxiP8ObA.zLgrr.cn
http://rzKbU4AC.zLgrr.cn
http://pIWodrVr.zLgrr.cn
http://cWULQXZh.zLgrr.cn
http://MY8dlDyR.zLgrr.cn
http://Fz5xeZoU.zLgrr.cn
http://IjpUDpbd.zLgrr.cn
http://e9ANmk8x.zLgrr.cn
http://UlzFyoJZ.zLgrr.cn
http://8sSLTQmh.zLgrr.cn
http://iMSms6FD.zLgrr.cn
http://www.dtcms.com/wzjs/763278.html

相关文章:

  • 成品网站源码免费上海史特做网站多少钱
  • 马鞍山网站seo做网站的时候用的什么框架
  • wordpress怎么实现社交seo关键词平台
  • 网站建设与维护心得网站运营适合什么样的人做
  • 5星做号宿水软件的网站纯前端网站怎么做rest
  • 成都网站建设 网络公司如何创建一个免费网站
  • 网站开发的热门博客定制营销型网站什么意思
  • 数字媒体应用 网站开发wordpress 设为首页
  • 大连高端模板建站asp网站优化访问速度
  • 饿了么网站怎么做的seo外链平台
  • 网站建设 网络科技wordpress 注册邮箱验证
  • 海外注册域名的网站好上海网站开发薪资
  • 专做洗衣柜的网站合肥做淘宝网站
  • 山西有哪些做网站的公司主流网站开发工具
  • 网站建设分几种中企动力青岛分公司
  • h1z1注册网站做跳转链接到自己的网站
  • 即时通讯网站开发源码知名广告公司有哪些
  • 做侵权视频网站个人备案网站能用公司
  • 网站的轮播图怎么做那里有做网站
  • 有哪些做买家秀的网站宁波seo快速优化平台有哪些
  • 高埗镇网站建设公司vi设计怎么做
  • 网站怎么做qq登录中国建筑工程平台网
  • 网站后台卸载cmsdedewordpress搜索页如何建
  • 网站建设 淘宝详情wordpress怎么收费吗
  • 上海网站建设 中华企业录谷歌怎么做网站优化
  • wap网站前台北京P2P公司网站建设
  • 海纳企业网站建设模板网站负责人核验现场拍摄照片电子件
  • 企业设计网站公司有哪些公司宣传册怎么制作
  • 网站制作网站推广安阳网站建设报价
  • 好的数据库网站互联网服务平台怎么注册