
数据结构
Hermione Granger
To be or not to be,that's a question.
展开
-
基于动态数组(构建完全二叉树)实现最大堆并实现添加,替换,删除,取堆顶元素等操作
完全二叉树,通俗的理解就是,把元素一层一层的往下放,直到放不下位置,所以右下角有可能是空的,还缺少一些元素二叉堆首先是一颗完全二叉树,除此之外它还有一个非常重要的性质,在堆中某个节点的值总是不大于其父节点的值,就是所有的父节点的值都大于等于它的孩子节点的值,这就是最大堆,反之就是最小堆完全二叉树的特点其实就是一个个节点按顺序一层一层的放下来,所以可以用数组的...原创 2019-03-14 11:52:54 · 17599 阅读 · 1 评论 -
leetcode 677. 键值映射(trie解决)
实现一个 MapSum 类里的两个方法,insert 和 sum。对于方法 insert,你将得到一对(字符串,整数)的键值对。字符串表示键,整数表示值。如果键已经存在,那么原来的键值对将被替代成新的键值对。对于方法 sum,你将得到一个表示前缀的字符串,你需要返回所有以该前缀开头的键的值的总和。示例 1:输入: insert("apple", 3), 输出: Null输入: sum("...原创 2019-04-08 19:48:33 · 17160 阅读 · 0 评论 -
Trie的递归实现和非递归实现
关于Trie: 在计算机科学中,Trie,又称字典树、单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。import java.util.TreeMap;/** * @author ...原创 2019-04-08 19:29:58 · 17847 阅读 · 0 评论 -
简单实现并查集(基于数组和基于树)
并查集:并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学的国际国内赛题中,其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往在空间上过大,计算机无法承受;即使在空间上勉强通过,运行的时间复杂度也极高,根本就不可能在...原创 2019-04-10 17:14:59 · 17465 阅读 · 0 评论 -
剑指offer 5.用两个栈实现队列
时间限制:1秒 空间限制:32768K 本题知识点: 队列 栈题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路:抽象的想象两个栈,调用push方法的时候在第一个栈中压入数据,然后在调用pop方法时,如果第二个栈为空,就从第一个栈中把数据倒入第二个栈,然后在第二个栈中取出顶部元素,等到取完的时候,再次倒入即可.import java.u...原创 2019-03-31 15:29:49 · 17059 阅读 · 0 评论 -
leet-code 307. 区域和检索 - 数组可修改
给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。update(i, val) 函数可以通过将下标为 i 的数值更新为 val,从而对数列进行修改。示例:Given nums = [1, 3, 5]sumRange(0, 2) -> 9 update(1, 2)sumRange(0, 2) -> 8说明:...原创 2019-03-29 18:17:32 · 17237 阅读 · 0 评论 -
leet-code 303.区域和搜索-数组不可变
给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。示例:给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 sumRange()sumRange(0, 2) -> 1sumRange(2, 5) -> -1sumRange(0, 5) -> -3说明:你可以假设数组不可变。...原创 2019-03-29 18:06:22 · 17021 阅读 · 0 评论 -
线段树的构建,查询与更新
线段树来自百度百科介绍:线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而未优化的空间复杂度为2N,实际应用时一般还要开4N的数组以免越界,因此有时需要离散化让空间压缩。想要理解线段树的代码,最好先参考https://blog.csdn.n...原创 2019-03-29 17:33:20 · 17166 阅读 · 0 评论 -
基于链表或二分搜索树实现Map映射(java语言版)
基于链表实现Map/** * @author BestQiang */public class LinkedListMap<K, V> implements Map<K, V> { private class Node { public K key; public V value; public...原创 2019-03-11 21:48:16 · 16742 阅读 · 0 评论 -
基于链表或二分搜索树实现Set集合(JAVA语言版)
Set集合一个重要的性质,不含有重复元素,在这里用自己写的二分搜索树实现,这个二分搜索树不存重复元素,符合Set集合的性质/** * @author BestQiang */public class BST<E extends Comparable<E>> { // 构建树的节点类 private class Node { p...原创 2019-03-11 21:42:29 · 16957 阅读 · 0 评论 -
二分搜索树的层序遍历
二分搜索树的层序遍历,即逐层进行遍历,即将每层的节点存在队列当中,然后进行出队(输出节点)和入队(存入下一层的节点)的操作,以此达到遍历的目的import java.util.LinkedList;import java.util.Queue;/** * @author BestQiang */public class BST2<E extends Comparabl...原创 2019-03-10 21:32:19 · 16995 阅读 · 0 评论 -
二分搜索树非递归(栈)实现遍历
// 二分搜索树的非递归前序遍历 public void preOrderNR() { // 声明一个栈,模拟系统栈 Stack<Node> stack = new Stack<>(); stack.push(root); while (!stack.isEmpty()) { ...原创 2019-03-10 21:28:03 · 16890 阅读 · 0 评论 -
二分搜索树的实现以及查询,遍历,删除之递归写法(java实现)
对之前学习的数据结构与算法做了一部分总结和复习,下面列出二分搜索树的实现以及查询,遍历,删除,为帮助大家更好理解,每个方法都加上了注释,下面是二叉树的递归实现/** * @author BestQiang */public class BST<E extends Comparable<E>> { // 构建树的节点类 private clas...原创 2019-03-10 13:35:56 · 16971 阅读 · 0 评论 -
基于最大堆实现优先队列
Queue的接口结构:public interface Queue<E> { int getSize(); boolean isEmpty(); void enqueue(E e); E dequeue(); E getFront();}基于最大堆的优先队列的实现,轻松完成入队和出队等基本操作(如果对最大堆的实现不理解请查看...原创 2019-03-14 12:11:47 · 17151 阅读 · 1 评论 -
数据结构小结
数据结构的分类:HashMap在jdk1.8之前和jdk1.8的区别:如果要从链表转换为红黑树,要求数据是可比较的的原创 2019-04-23 20:25:57 · 17082 阅读 · 0 评论