之前的文章中,我们有介绍过动态数组ArrayList,双向队列LinkedList,键值对集合HashMap,树集TreeMap.他们都各自有各自的优点,ArrayList动态扩容,数组实现查询非常快但要求连续内存空间,双向队列LinkedList不需要像ArrayList一样创建连续的内存空间,它以链表的形式连接各个节点,但是查询搜索效率极低.HashMap存放键值对,内部使用数组加链表实现,检索快但是由于键是按照Hash值存储的,所以无序,在某些情况下不合适.TreeMap使用优化了的排序二…
PriorityQueue 的 implementation PriorityQueue即是优先队列.通俗的说就是体育课的时候老师要求从高到低排序,老师能直接一眼看出谁是最高的在班级里.当这个最高的离开的时候,老师也马上能知道下面哪个最高的人. public class MaxPriorityQueue<T extends Comparable<T>> { public void insert(T t) { } public T max(){} public T delMax()…
算法竞赛中的常用JAVA API:PriorityQueue(优先队列) PriorityQueue 翻译过来就是优先队列,本质是一个堆, 默认情况下堆顶每次都保留最小值,每插入一个元素,仍动态维护堆顶为最小值. 初始化 PriorityQueue()//使用默认的初始容量(11)创建一个 PriorityQueue,并根据其自然顺序对元素进行排序. PriorityQueue<Integer> Q = new PriorityQueue<>(); // 初始化 常用函数 add(…
一.前言 之前用java实现堆结构,一直用的优先队列,但是在实际的面试中,可能会要求用数组实现,所以还是用java老老实实的实现一遍堆结构吧. 二.概念 堆,有两种形式,一种是大根堆,另一种是小根堆.堆,一般是二叉树,这个概念当然也可以扩展到k叉树.大根堆指的是根节点的值要大于左子树和右子树所有节点值,堆的子树也是堆.小根堆的概念同理可知. 三.实现过程 堆的形式是一棵树,但是我们可以用数组来实现它,父节点和孩子节点的父子关系通过数组下标来确定. 它的左右孩子节点和父节点的位置,如上图所示. 在…
Libheap是一个用于在Linux平台上分析glibc堆结构的GDB调试脚本,使用Python语言编写.         安装 Glibc安装 尽管Libheap不要求glibc使用GDB调试支持和符号进行编译,但是如果用户使用的话,也不会影响它的功能.已经有很多手动构建Glibc的指导说明,目前最合适的一个: Devpit – Building GLIBC Fedora上使用了以下简单的方法实现了该方法: debuginfo-install glibc 使用该命令,系统会自动安装并设置调试G…
TOP-K问题是面试高频题目,即在海量数据中找出最大(或最小的前k个数据),隐含条件就是内存不够容纳所有数据,所以把数据一次性读入内存,排序,再取前k条结果是不现实的. 下面我们用简单的Java8代码去解决TOP-K问题.为了使主要的逻辑更加清晰,去掉了一些如参数合法性检查等非关键代码. PriorityQueue(优先队列)是JDK1.5开始提供的,主要作者包括大名鼎鼎的纽约大学教授Doug Lea,他也是Java JUC包的鼻祖哦. PriorityQueue相当于一个堆(默认为小根堆,如果…
作者:Grey 原文地址: 使用加强堆结构解决topK问题 题目描述 LintCode 550 · Top K Frequent Words II 思路 由于要统计每个字符串的次数,以及字典序,所以,我们需要把用户每次add的字符串封装成一个对象,这个对象中包括了这个字符串和这个字符串出现的次数.…
结构体  枚举作类的成员属性: 定义一个学生类 性别 -- 枚举 生日 入学日期  毕业日期  --  结构体 代码示例: 声明文件 Student.h: #import <Foundation/Foundation.h> typedef struct { int year; int month; int day; } Date; typedef enum { kGenderGirl = , kGenderBoy = , kGenderChunGe = } Gender; @interface…
关于结构体和C++类的内存地址问题   今天终于有时间写点东西了~ 太爽了  *_*   很多人都知道C++类是由结构体发展得来的,所以他们的成员变量(C语言的结构体只有成员变量)的内存分配机制是一样的.下面我们以类来说明问题,如果类的问题通了,结构体也也就没问题啦.   类分为成员变量和成员函数,我们先来讨论成员变量.   一个类对象的地址就是类所包含的这一片内存空间的首地址,这个首地址也就对应具体某一个成员变量的地址.(在定义类对象的同时这些成员变量也就被定义了)我们来以一段代码说明问题:…
首先, pom需要引入 <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.39</version> </dependency> <!-- mybatis--> <dependency> <group…