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

太原建设局网站防控措施持续优化

太原建设局网站,防控措施持续优化,百度免费网站如何建设,ant design 做网站📟作者主页:慢热的陕西人 🌴专栏链接:力扣刷题日记 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 文章目录 牛客热题:数据流中的中位数题目链接方法一…

📟作者主页:慢热的陕西人

🌴专栏链接:力扣刷题日记

📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言

在这里插入图片描述

文章目录

  • 牛客热题:数据流中的中位数
    • 题目链接
    • 方法一:直接插入排序
      • 思路
      • 代码
      • 复杂度
    • 方法二:堆
      • 思路
      • 代码
      • 复杂度

牛客热题:数据流中的中位数

题目链接

数据流中的中位数_牛客题霸_牛客网 (nowcoder.com)

方法一:直接插入排序

思路

插入:

  • 对于每次的插入:
    • 如果序列为零:直接插入
    • 如果序列中的值均小于当前要插入的值:直接插入到序列的尾部
    • 找到序列中第一个比当前要插入的值大的位置,然后将当前的值插入到这个位置,将后续的序列向后挪

计算中位数:

  • 对于偶数的情况
    • 我们直接返回第N / 2 和N / 2 - 1 个元素的平均值即可
  • 对于奇数的情况
    • 我们直接返回N / 2个元素

代码

#include <vector>
class Solution {
public:void Insert(int num) {int n = v.size();if(n == 0) {v.push_back(num);return ;}else{auto it = lower_bound(v.begin(), v.end(), num);v.insert(it, num);}}double GetMedian() { int n = v.size();if(n == 1) return v[0];if(n % 2 == 1){return v[n / 2];}else return (v[n / 2] + v[n / 2 - 1]) / 2;}private:vector<double> v;};

复杂度

时间复杂度:O( N 2 N^2 N2) ,因为每次插入都需要在前面的元素中遍历找到对应的位置,所以每个元素的插入的时间复杂度是O(N),因此时间复杂度为O( N 2 N^2 N2)

空间复杂度:O(N) , 只额外使用了一个对应的vector容器来存储

方法二:堆

思路

中位数是指:有序数组中中间的那个数。则根据中位数可以把数组分为如下三段:
[0 ... median - 1], [median], [median ... arr.size() - 1],即[中位数的左边,中位数,中位数的右边]

那么,如果我有个数据结构保留[0…median-1]的数据,并且可以O(1)时间取出最大值,即arr[0...median-1]中的最大值
相对应的,如果我有个数据结构可以保留[median + 1 ... arr.size() - 1] 的数据, 并且可以O(1)时间取出最小值,即
arr[median + 1 ... arr.size() - 1] 中的最小值。
然后,我们把[median]即中位数,随便放到哪个都可以。

假设[0 ... median - 1]的长度为l_len, [median + 1 ... arr.sise() - 1]的长度为 r_len.
1.如果l_len == r_len + 1, 说明,中位数是左边数据结构的最大值
2.如果l_len + 1 == r_len, 说明,中位数是右边数据结构的最小值
3.如果l_len == r_len, 说明,中位数是左边数据结构的最大值与右边数据结构的最小值的平均值。

说了这么多,一个数据结构可以O(1)返回最小值的,其实就是小根堆,O(1)返回最大值的,其实就是大根堆。并且每次插入到堆中的时间复杂度为O(logn)

所以,GetMedian()操作算法过程为:

  • 初始化一个大根堆,存中位数左边的数据,一个小根堆,存中位数右边的数据
  • 动态维护两个数据结构的大小,即最多只相差一个

代码

#include <queue>
class Solution {
private:#define SCD static_cast<double>priority_queue<int> min_q;priority_queue<int, vector<int>, greater<int>> max_q;public:void Insert(int num) {//优先插入到对应的大堆min_q.push(num);max_q.push(min_q.top());min_q.pop();if(min_q.size() < max_q.size()){min_q.push(max_q.top());max_q.pop();}        }double GetMedian() { //因为是优先插入大堆的, 所以:min_q >= max_qreturn min_q.size() > max_q.size() ? SCD(min_q.top()) : SCD(min_q.top() + max_q.top()) / 2;}};

复杂度

  • 时间复杂度:Insert函数O( l o g n logn logn),维护堆的复杂度,GetMedian函数O(1),直接访问
  • 空间复杂度:O(n),两个堆的空间,虽是两个,但是一个堆最多 n / 2 n / 2 n/2
http://www.hkea.cn/news/225254/

相关文章:

  • 贵州软件开发 网站开发手机版百度一下
  • 企业网站建立答辩问题百度怎么发布广告
  • 温州快建网站地推拉新接单网
  • 濉溪县城乡建设委员会燃气办网站热狗网站排名优化外包
  • 网站能不能自己做免费的seo教程
  • 湖南的商城网站建设优化教程网下载
  • 做网站需要哪些工程师西安seo诊断
  • tp做的网站封装成app2023北京封控了
  • 增城做网站要多少钱推广普通话手抄报
  • 石家庄网站系统开发智能搜索引擎
  • 迅速网站网络营销平台推广方案
  • 学前端要逛那些网站微信引流主动被加软件
  • 韩国flash网站免费手机网站建站平台
  • 东莞做网站卓诚网络昆明长尾词seo怎么优化
  • WordPress个性萌化插件郑州seo优化哪家好
  • 专业手机移动网站建设免费的seo优化
  • 西安网站建设王永杰域名注册 万网
  • 网站营销优化方案北京做的好的seo公司
  • 企业网站排名提升软件优化南宁seo优化
  • 创意合肥网站建设杭州seo公司排名
  • 网站专题页是什么中国十大关键词
  • 五月天做网站网络策划与营销
  • 高校网站如何建设论文谷歌官网下载
  • 做网站内容软件个人网站怎么做
  • 收废铁的做网站有优点吗海南百度推广开户
  • wordpress 二维码插件下载信阳搜索引擎优化
  • 个人网站二级域名做淘宝客企业推广策略
  • 厦门做网站seo的seo服务公司招聘
  • 安徽池州做企业网站百度搜索官方网站
  • 芜湖商城网站建设青岛百度快速优化排名