解法一:小根堆 要得到从小到大的第 \(n\) 个丑数,可以使用最小堆实现。 初始时堆为空。首先将最小的丑数 \(1\) 加入堆。 每次取出堆顶元素 \(x\),则 \(x\) 是堆中最小的丑数,由于 \(2x, 3x, 5x\) 也是丑数,因此将 \(2x, 3x, 5x\) 加入堆。 上述做法会 ...
分类:
其他好文 时间:
2021-06-16 18:15:45
阅读次数:
0
问题: 设计结构体,能够满足以下两个功能: 向结构体中插入数据 void addNum(int num) 去当前结构体中的中位数 double findMedian() 若共有奇数个数,取最中间的数 若共有偶数个数,取中间两个数之和/2 Example 1: Input ["MedianFinder ...
分类:
其他好文 时间:
2021-04-16 11:45:21
阅读次数:
0
丑数 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 方法1:最小堆,基于sort.IntSlice实现heap 方法2:动态规划 func nthUglyNumb ...
分类:
其他好文 时间:
2021-04-12 11:41:41
阅读次数:
0
import heapq class TopK: """ 获取大量元素 topk 大个元素,固定内存 思路: 1. 先让入元素前 k 个建立一个最小堆 2. 迭代剩余元素: 如果当前元素小于堆顶元素,跳过该元素 否则替换堆顶元素为当前元素,并重新调整堆 """ def __init__(self, ...
分类:
编程语言 时间:
2021-03-30 13:16:26
阅读次数:
0
思路:维护一个K大小的最小堆,堆顶就是最小的元素,新元素都比堆顶小,当堆中元素个数小于K时,直接进入堆,当堆顶小于新元素时,弹出堆顶,新元素加入堆。 #include <iostream> #include <vector> #include <queue> using namespace std; ...
分类:
其他好文 时间:
2021-01-13 11:29:41
阅读次数:
0
本文的内容是如何通过二叉树实现一个最大堆, 实现原理方面参考了这篇文章. 一. 堆的数据结构 1. 数据结构分析 堆的本质就是一颗二叉树, 这颗二叉树必须具备以下两个性质: 1). 对于最大堆来说, 二叉树根节点的值不小于任何子节点, 其所有子树也符合这一特征, 最小堆则相反; 2). 堆是一颗完全 ...
分类:
编程语言 时间:
2021-01-06 11:45:46
阅读次数:
0
二叉堆是一种应用很广的数据结构,今天,我们就来简单讲讲二叉堆。什么是二叉堆?二叉堆是一种特殊的堆。具有如下的特性:具有完全二叉树的特性。堆中的任何一个父节点的值都大于等于它左右孩子节点的值,或者都小于等于它左右孩子节点的值。根据第二条特性,我们又可以把二叉堆分成两类:1、最大堆:父节点的值大于等于左右孩子节点的值。2、最小堆:父节点的值小于等于左右孩子节点的值。我们把二叉堆的根节点称之为堆顶。根据
分类:
编程语言 时间:
2020-12-02 12:34:24
阅读次数:
6
一:heap dump 1、heapdump:记录内存信息的,heap dump文件是一个二进制文件,它保存了某一时刻JVM堆中对象使用情况, heapdump文件是指定时刻的Java堆栈的快照,是一种镜像文件。 2、产生heapdump(内存溢出)错误原因一般出于以下原因: 1)JVM内存过小。 ...
分类:
其他好文 时间:
2020-11-24 12:19:42
阅读次数:
8
一、前言 二叉堆是一个特殊的堆,其本质是一棵完全二叉树,可用数组来存储数据,如果根节点在数组的下标位置为1,那么当前节点n的左子节点为2n,有子节点在数组中的下标位置为2n+1。二叉堆类型分为最大堆(大顶堆)和最小堆(小顶堆),其分类是根据父节点和子节点的大小来决定的,在二叉堆中父节点总是大于或等于 ...
分类:
编程语言 时间:
2020-09-16 12:12:33
阅读次数:
31
2020.08.05 1、多线程 2、IPC、共享内存 3、bind 4、合并n个有序链表 (力扣原题 使用最小堆会快一些) #include <queue> using namespace std; struct ListNode { int val; ListNode* next; ListNo ...
分类:
其他好文 时间:
2020-08-20 18:20:10
阅读次数:
118