• 2024-06-22LeetCode 2542. 最大子序列的分数(贪心、小顶堆)
    2542.最大子序列的分数思路:先对nums2按降序排列,然后遍历nums2的最小值,同时在区间[0,i]中选中k个最大的nums1即可。然后找出最大的ansclassSolution{public:typedefpair<int,int>PII;longlongmaxScore(vector<int>&nums1,vector<int>&nums2,intk)
  • 2024-06-21(nice!!!)LeetCode LCP 20. 快速公交(记忆化搜索+小顶堆+贪心)
    LCP20.快速公交思路:逆向记忆化搜索。思考从target到0所花的最小时间。通过哈希表来进行记忆化搜索,避免重复遍历。细节看注释classSolution{public:typedeflonglongLL;typedefpair<LL,LL>PII;constintmod=1e9+7;intbusRapidTransit(int
  • 2024-06-183、17算法学习(1)存在的问题(c中如何表示大、小顶堆)
    二路归并、逆序对多路归并,堆栈1、多路归并模板先将数据读入堆栈,然后取栈顶的最大值或最小值,最后再根据公式进行递推求出需要添加的元素。题目:https://www.acwing.com/problem/content/description/1264/https://www.acwing.com/problem/content/148/模板:intwork(intn
  • 2024-03-03大顶堆,小顶堆--优先队列,示例
    有一个数组,要求找出最大的3个数,最小的4个数。 小顶堆,从大到小排序,筛选最小的N个数。//创建一个小顶堆std::priority_queue<int,std::vector<int>,std::greater<int>>min_heap;  大顶堆,从小到大排序,筛选最大的N个数。//创建一个大顶堆std::priori
  • 2023-10-28使用数组实现一个小顶堆
    堆也叫优先队列,可以在\(\mathcal{O(1)}\)时间里得到堆中的最小/大元素。堆在各种编程语言中都有实现,c++STL里面有priority_queue,java中是Priority_Queue,python里提供了heapp模块实现对堆的各种操作。堆可以分为小顶堆和大顶堆,顾名思义,小顶堆堆顶存储堆中的最小值,大顶堆堆顶存储堆
  • 2023-10-08关于大顶堆和小顶堆习题的解决
    好吧,不得不承认的是,我之前对于堆的知识确实没理解,现在急用它,就急学!一般的习题的话,就是要求我们判断某个序列,是不是大顶堆或者小顶堆。小顶堆要求,k(i)≤k(2i)且k(i)≤k(2i+1)大顶堆要求,k(i)≥k(2i)且k(i)≥k(2i+1)就只需要这两个条件就能判断顶堆是否成立啦~~
  • 2023-09-06LeetCode347——前K个高频元素
    给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例1:输入:nums=[1,1,1,2,2,3],k=2输出:[1,2]示例2:输入:nums=[1],k=1输出:[1] 提示:1<=nums.length<=10e5k 的取值范围是 [
  • 2023-08-15代码随想录算法训练营第十三天|单调数列:滑动窗口最大值(力扣239.)、优先级队列:前k个高频元素(力扣347.)
    单调数列:滑动窗口最大值(力扣239.)给定滑动窗口的范围,求每个滑动窗口范围内的最大值使用单调队列实现对于最大值数字前面的数字不存入数列,对于最大值数字后面的数字存入数列中单调队列中数字的大小呈递减顺序pop(value):如果窗口移除的元素等于单调队列的队口元素,则pop;否则什
  • 2023-08-06数据结构:堆 heap
    堆分为小顶堆和大顶堆,其本质是一颗完全二叉树,不同点在于:除叶子节点外,小顶堆的每个父节点的key都要比其左右两个子节点的key小;大顶堆的每个父节点的key都要比其左右两个子节点的key大。其中,key是节点的取值,index为节点在树中的索引或者位置。小顶堆/大顶堆的特点在于,其根节点一定
  • 2023-05-28有序矩阵中的第 k 个最小数组和-小顶堆法
    有序矩阵中的第k个最小数组和题目描述方法一从上到下遍历矩阵的所有行,假设计算出了前\(i−1\)行形成的前\(k\)个最小数组和(记作\(sum\)),遍历到第\(i\)行时,把\(sum\)与第\(i\)行的数两两相加,然后只保留其中最小的\(k\)个数,作为新的\(sum\),然后继续遍历矩阵的下
  • 2023-04-12JAVA 用 List 实现堆
    大顶堆:每个父节点都大于子节点小顶堆:每个父节点都小于子节点在堆中,每次加入元素或者移除元素,都要调整堆的位置,使其满足堆的定义。常用于topK问题,k个最大/最小元素,每次弹出大顶堆/小顶堆堆顶元素即可。以及堆排序问题,堆排序可以看成是将待排序的数组元素依次加入堆(每次加入
  • 2023-02-27topN算法问题
    问题:如何在10亿个整数中找出前1000个最大的数?小顶堆堆排序首先,我们需要构建一个大小为N(1000)的小顶堆,小顶堆的性质如下:每一个父节点的值都小于左右孩子节点,然后依次从
  • 2023-02-22大顶堆和小顶堆
    1.什么是堆、大顶堆和小顶堆堆是一种非线性结构,可以把堆看作一棵二叉树,也可以看作一个数组,即:堆就是利用完全二叉树的结构来维护的一维数组。堆可以分为大顶堆和小顶堆:
  • 2023-02-21leetcode 703. 数据流中的第K大元素 小顶堆
    建立一个大小为k的最小堆,堆顶就是第k大的元素数据流中如果有比k大的元素,入堆,重新调整,保持一共k个元素如果比k小直接返回堆顶即可#include<iostream>#include<vecto
  • 2023-02-19基于四叉树的小顶堆(最小优先队列)
    实现来自Go源码 从下往上调整堆funcsiftupTimer(t[]*timer,iint)bool{ifi>=len(t){returnfalse}when:=t[i].whentmp:=t[i]
  • 2023-01-27day12
    1、leetcode239滑动窗口最大值思路:使用一个队列,将窗口里的元素放入队列,然后随着窗口的移动,队列也一进一出,每次移动之后,队列告诉我们里面的最大值是什么。队列所需
  • 2023-01-13数据结构与算法 -> 大顶堆与小顶堆
    一、大顶堆大顶堆是一种数据结构,它是一颗完全二叉树,并且满足以下性质:每个节点的值都大于或等于它的子节点的值因此,大顶堆的根节点(也称为堆顶)总是最大的元素二、小
  • 2023-01-04力扣347 前K个高频元素
    题目:给你一个整数数组nums和一个整数k,请你返回其中出现频率前k高的元素。你可以按任意顺序返回答案。示例:输入:nums=[1,1,1,2,2,3],k=2输出:[1,2]
  • 2022-11-30LeetCode刷题记录.Day29
    前K个高频元素classSolution{public://小顶堆classmycomparison{public:booloperator()(constpair<int,int>&lhs,constpair<int,
  • 2022-10-04Java PriorityQueue(优先队列)实现大顶堆和小顶堆
    JavaPriorityQueue类是一种队列数据结构实现它与遵循FIFO(先进先出)算法的标准队列不同。//默认为小顶堆PriorityQueue<Integer>minHeap=newPriorityQueue<>(k,(a,b