• 2024-11-01堆排序的原理 以及堆的建立
    堆的定义堆的定义如下,n个关键字序列\(L[1....n]\)称为堆,当且仅当序列满足:\(L(i)>=L(2i)\)且\(L(i)>=L(2i+1)\)\(\quad\)(\(1<=i<=n/2\))或者\(L(i)<=L(2i)\)且\(L(i)<=L(2i+1)\)\(\quad\)(\(1<=i<=n/2\))堆的性质与特点可以将堆视为一颗完全二叉树,满足条件1的称为大根
  • 2024-10-03
    堆的性质1.堆是一颗完全二叉树2.堆的顶端一定是“最大”,最小”的,但是要注意一个点,这里的大和小并不是传统意义下的大和小,它是相对于优先级而言的,当然你也可以把优先级定为传统意义下的大小,但一定要牢记这一点,初学者容易把堆的“大小”直接定义为传统意义下的大小,某些题就不是按
  • 2024-09-21Leetcode 378. 有序矩阵中第 K 小的元素
    1.题目基本信息1.1.题目描述给你一个nxn矩阵matrix,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。请注意,它是排序后的第k小元素,而不是第k个不同的元素。你必须找到一个内存复杂度优于O(n^2)的解决方案。1.2.题目地址https://leetcode.cn/problem
  • 2024-08-28leetcode215. 数组中的第K个最大元素,小根堆/快排思想
    leetcode215.数组中的第K个最大元素给定整数数组nums和整数k,请返回数组中第k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。你必须设计并实现时间复杂度为O(n)的算法解决此问题。示例1:输入:[3,2,1,5,6,4],k=2
  • 2024-08-05快速幂的模板和维持动态变化中的最大值最小值,以及常见递归
      快速幂和大根堆小根堆都是一些需要记忆的东西,方便后面在题目中实现应用。图中的最短路径两个常用算法:  prim算法:通过小根堆来实现的,小根堆的作用是用来时刻维持状态的最小值。kruskal算法:核心手段(并查集)然后一开始是打算学习01bfs的,发现对于递归的过程确实还是理
  • 2024-07-13最小数字游戏(Lc2974)——模拟+优先队列(小根堆)、排序+交换
    你有一个下标从 0 开始、长度为 偶数 的整数数组 nums ,同时还有一个空数组 arr 。Alice和Bob决定玩一个游戏,游戏中每一轮Alice和Bob都会各自执行一次操作。游戏规则如下:每一轮,Alice先从 nums 中移除一个 最小 元素,然后Bob执行同样的操作。接着,Bob会将
  • 2024-06-02堆排序-java
    这次主要讲了堆排序和堆的基本构造,下一期会详细讲述堆的各种基本操作。文章目录前言一、堆排序1.题目描述2.堆二、算法思路1.堆的存储2.结点下移down3.结点上移up4.堆的基本操作5.堆的初始化三、代码如下1.代码如下:2.读入数据:3.代码运行结果总结前言
  • 2024-05-28数组中的第K个最大元素
    主管问到这个问题(数组中的第K个最大元素)。我首先答了partition算法时间复杂度O(n)空间复杂度O(1)。主管说不行,要用堆。然后(我回答)用建大根堆,取前k,时间复杂度O(n+klogn)初始化O(n),pop出k个O(klogn),空间复杂度O(k)(使用原数组建堆,pop出k个)。主管说都不行,然后(主管)给了个小根堆的算法
  • 2024-03-29平衡树
    不持续更新。前置知识二叉搜索树又称BST堆其实我也不会FHQ-Treap一般使用小根堆。FHQ-Treap简述FHQ-Treap是一种基于分裂和合并操作的平衡树。它没有旋转,极易上手,非常适合cainiaoshanglu。核心思想我们对于一个点存储两个权值\(a_i,h_i\),其中\(a_i\)满足小根
  • 2024-03-23java数据结构与算法基础-----排序------堆排序
    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846文章目录堆排序是利用堆(数据结构)设计的排序算法,属于选择排序,最坏,最好,平均时间复杂度均为O(nlogn),不稳
  • 2023-12-14python heapq 模块
    堆的概念堆是用数组表示的二叉树,分为大根堆和小根堆:大根堆是堆顶元素最大的堆,小根堆是堆顶元素最小的堆 堆的建立堆用列表来表示。在往堆中加入元素时,在列表最后加入一个元素并与其父节点比较(n/2位置)看是否需要进行交换,然后层层比较直到根节点pythonheapq#建立小根堆
  • 2023-11-18堆以及堆的应用--堆排序
    堆定义:什么是堆?从堆的定义上我们可以看出,堆在物理结构上是一维数组,逻辑结构上,可以把堆理解为一棵完全二叉树,因为堆满足ki<=k2i+1,ki<=k2i+2(ki>=k2i+1,ki>=k2i+2),而我们了解对于完全二叉树,父结点和孩子结点存储在一维数组中有如下的下标关系:leftchild=parent*2+1rightchild=parent*2
  • 2023-10-29大根堆/小根堆
    #include<iostream>#include<algorithm>#include<vector>#include<queue>#include<random>#include"util.h"usingnamespacestd;structPoint{intx,y;//priority_queue<Point>大根堆需要重载小于号boolo
  • 2023-09-30堆的应用
    前言本文针对CSP-S2/NOIP复习,重点在在哪用、怎么写,底层原理和实现不是重点。堆的概念和应用情景堆是一种可以在\(O(\logn)\)的时间内维护一个最值的数据结构,维护最大值的称为大根堆,维护最小值的称为小根堆。堆的应用只有一个,就是求最值,但求什么最值、求出最值后怎么用,需
  • 2023-07-18[刷题笔记] Luogu P1168 中位数
    ProblemDescription题目描述非常简洁,不作解释。Solution题目要求对前奇数项求中位数?朴素的做法是暴力,但是范围1e5显然T。这里主要介绍一种堆顶堆的做法。堆顶堆是什么呢?我们不妨开两个堆,一个大根堆一个小根堆。动态维护中位数,初始令前1位的中位数为\(a_i\),遍历数组,若遇到比中
  • 2023-06-29对顶堆例题
    例题:洛谷中位数以下题解来自于https://www.luogu.com.cn/blog/SeanMoe/solution-p1168使用两个堆,大根堆维护较小的值,小根堆维护较大的值即小根堆的堆顶是较大的数中最小的,大根堆的堆顶是较小的数中最大的将大于大根堆堆顶的数(比所有大根堆中的元素都大)的数放入小根堆,小于等于
  • 2023-06-122023/6/12日学习笔记
    堆在STL中可以用优先队列来构造使用堆std::priority_queue<int,std::vector<int>>q;//大根堆std::priority_queue<int,std::vector<int>,std::greater<int>>q;//小根堆push()     将元素插入优先队列。pop()      将优先级最顶层的元素从
  • 2023-04-194、19
    收获:1)补漏:小根堆对顶竟然是最小值2)数学:1、用数学课理解了扩展欧几里得算法和它的大部分应用2、发现数学章节推不动了,从中国剩余定理开始都不会了3、发现数学老师不会推欧拉的函数式子3)做题一定先想好什么时候无解数据结构一
  • 2023-04-15算法-丑数2-构造小根堆
    intNthUglyNumber(intn){if(n==1)return1;List<long>arr=newList<long>();//这里用list,它会自己扩容,用数组就需要自己操作这些了arr.Add(1);int[]uglyArr={2,3,5};HashSet<long>hs=newHashSet<long>();hs.Add(1);
  • 2023-03-27中位数
      这道题目因为n是1e5级别的所以输入一次再排序一次不现实,辣么有两个东西可以写这道题目,1小根堆(免去排序时间),2二分插入,由于小根堆太难写了所以采用第二种方法,简简单单~
  • 2023-03-15排序算法 之 (直接插入排序)
    10.6、堆排序对于n个关键字序列L[1...n],满足下面某一条性质,则称为堆(Heap)若满足:\(L(2i)\leL(i)\)且\(L(2i+1)\leL(i)\),\(1\lei\len\),大根堆(大顶堆)若满足:\(L(
  • 2022-12-31小根堆
    packageclass06;importjava.util.Comparator;importjava.util.PriorityQueue;/***只把标记1,和标记2,两处的大于号,改成小于号,就是小根堆。*/publicclassCod
  • 2022-09-04
    从上到下,从左往右大根堆父节点的值大于或等于子节点的值小根堆父节点的值小于或等于子节点的值插入(小根堆)1、将新节点放到右下角空缺处(没有空缺则新起一行,加到这一
  • 2022-08-25 P4597 & CF713C 【小根堆贪心】
    P4597序列sequenceCF713CSonyaandProblemWihtoutaLegend用于描述一系列问题类似在一条序列上每次加一或减一,使他的原序列变成一条非降序列,求最小次数的问题。
  • 2022-08-15[AcWing 145] 超市
    贪心+小根堆点击查看代码#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;typedefpair<int,int>PII;constintN=1e6+10;intn;