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

西安企业信息查询官网seo测试工具

西安企业信息查询官网,seo测试工具,保健品网站建设方案书模板,太原网站建设王道下拉惠最小堆 最小堆是一种特殊的完全二叉树数据结构。 基本定义 堆性质:每个节点的值都小于或等于其子节点的值(根节点是最小值)完全二叉树性质:除了最底层外,其他层的节点都是满的,且最底层的节点都靠左排列…

最小堆

最小堆是一种特殊的完全二叉树数据结构。

基本定义

  • 堆性质:每个节点的值都小于或等于其子节点的值(根节点是最小值)
  • 完全二叉树性质:除了最底层外,其他层的节点都是满的,且最底层的节点都靠左排列

关键特性

  • 根节点最小:堆顶元素始终是堆中的最小值
  • 高效操作:
    • 获取最小值: O ( 1 ) O(1) O(1)
    • 插入元素: O ( l o g n ) O(log n) O(logn)
    • 删除最小值: O ( l o g n ) O(log n) O(logn)

实现方式

最小堆通常用数组实现,利用数组索引表示树结构:

  • 对于索引 i 的元素:
    • 父节点索引:(i-1)/2
    • 左子节点索引:2i+1
    • 右子节点索引:2i+2

问题描述

The median is the middle value in an ordered integer list. If the size of the list is even, there is no middle value, and the median is the mean of the two middle values.

  • For example, for arr = [2,3,4], the median is 3.
  • For example, for arr = [2,3], the median is (2 + 3) / 2 = 2.5.

Implement the MedianFinder class:

  • MedianFinder() initializes the MedianFinder object.
  • void addNum(int num) adds the integer num from the data stream to the data structure.
  • double findMedian() returns the median of all elements so far. Answers within 1 0 − 5 10^{-5} 105 of the actual answer will be accepted.

Example:

Input

["MedianFinder", "addNum", "addNum", "findMedian", "addNum", "findMedian"]
[[], [1], [2], [], [3], []]

Output

[null, null, null, 1.5, null, 2.0]

Explanation

MedianFinder medianFinder = new MedianFinder();
medianFinder.addNum(1);    // arr = [1]
medianFinder.addNum(2);    // arr = [1, 2]
medianFinder.findMedian(); // return 1.5 (i.e., (1 + 2) / 2)
medianFinder.addNum(3);    // arr[1, 2, 3]
medianFinder.findMedian(); // return 2.0

问题描述

设计一个数据结构,能够支持以下两种操作:

  • addNum(int num) - 向数据结构中添加一个整数
  • findMedian() - 返回当前所有元素的中位数

如果元素数量是奇数,中位数是最中间的数;如果是偶数,中位数是中间两个数的平均值。

方法思路

数据结构

我们可以使用两个堆来高效解决这个问题:

  • 一个最大堆max_heap存储较小的一半数字
  • 一个最小堆min_heap存储较大的一半数字

这样设计可以保证:

  • 最大堆的堆顶是较小一半数字中的最大值
  • 最小堆的堆顶是较大一半数字中的最小值
  • 两个堆的大小保持平衡(大小相等或最大堆比最小堆多1)

addNum 操作:

  • 先将新数字加入最大堆
  • 然后将最大堆的堆顶(当前最大值)移到最小堆
  • 最后检查并平衡两个堆的大小,确保最大堆的大小不小于最小堆

findMedian 操作:

  • 如果最大堆比最小堆多一个元素,返回最大堆的堆顶
  • 否则返回两个堆顶的平均值

解决代码

#include <queue>
#include <vector>using namespace std;class MedianFinder {
private:priority_queue<int> max_heap; // 存储较小的一半,最大堆priority_queue<int, vector<int>, greater<int>> min_heap; // 存储较大的一半,最小堆public:MedianFinder() {}void addNum(int num) {// 先将数字加入最大堆max_heap.push(num);// 将最大堆的最大值移到最小堆min_heap.push(max_heap.top());max_heap.pop();// 平衡两个堆的大小if (max_heap.size() < min_heap.size()) {max_heap.push(min_heap.top());min_heap.pop();}}double findMedian() {if (max_heap.size() > min_heap.size()) {return max_heap.top();} else {return (max_heap.top() + min_heap.top()) / 2.0;}}
};

复杂度分析

  • addNum O ( l o g n ) O(log n) O(logn),因为堆的插入和删除操作都是对数时间复杂度
  • findMedian O ( 1 ) O(1) O(1),只需要访问堆顶元素

这种方法巧妙地利用了两个堆的性质,使得我们可以在对数时间内添加元素,常数时间内找到中位数。

http://www.dtcms.com/wzjs/176863.html

相关文章:

  • dns服务器 域名不存在时 跳转到指定网站网络营销工程师培训
  • 品牌建设不足怎么表达国内seo工具
  • 个人可以做哪些有意思的网站百度seo新站优化
  • 网站文章内容泰州seo推广公司
  • 网站大图分辨率做多大2023重大新闻事件10条
  • 盐城哪里帮助公司建网址亚马逊关键词快速优化
  • 移动通信网站建设qq营销软件
  • 微信链接的微网站怎么做的seo培训一对一
  • 在哪些网站可以做企业名称预审bt磁力猫
  • 哪里有做独立网站的服务器深圳网站设计专业乐云seo
  • 吉林网站建设百度seo优化推广公司
  • 动态网页案例seo网络优化师就业前景
  • 电脑怎么做网站百度安装
  • 自己不会代码让别人做网站怎么管理网站推广的主要方法
  • 合肥网站制作哪家好灰色关键词代发可测试
  • 移动商城网站开发选择李勇seo的博客
  • 珠海中企网站建设公司大亚湾发布
  • 网站建设都包括哪些班级优化大师官网下载
  • 网站建设哪家好?看这里天津搜狗seo推广
  • 国外做自动化网站上海网站seo策划
  • apple 官网网站模板百度在线下载
  • 济南经三路专业做网站厦门谷歌seo公司有哪些
  • 做网站的公司主营成本应该写啥地推的方法和技巧
  • 做机械设备类网站用什么颜色好无锡网站建设公司
  • 网站做支付需要准备什么条件兰州seo优化
  • html5视频网站源码windows清理优化大师
  • wordpress 子站点函数上海百度推广客服电话
  • 无锡疫情最新规定seo点击工具帮你火21星热情
  • 做网站的软件page搜索引擎排行榜前十名
  • 大学英文网站建设微商引流一般用什么软件