Fork me on GitHub

随笔分类 -  数据结构

1
摘要:前言 “动态规划”在大一时,就知道了这个词,当时觉得好难好高大上,从此心生畏惧,闻词色变,心理阴影一直留存到现在。 在校招时,也多次被问到动态规划相关的题目。 本篇从一道经典动态规划题目说起,慢慢展开。 从题目讲起 【换钱的方法数】 给定数组 arr,arr 中所有的值都为正数且不重复。每个值代表一 阅读全文
posted @ 2017-09-05 07:50 郑斌blog 阅读(818) 评论(0) 推荐(0) 编辑
摘要:递归实现 时间、空间复杂度均为 O(logN) 非递归实现 时间复杂度为 O(logN),空间复杂度为 O(1) 简单应用:在有序数组中查找某数 num 的出现次数 m 给定数组 arr 和要找的数为 num。 首先确定 num 最左出现的下标位置,记为 indexL,再确定 num 在数组中最右出 阅读全文
posted @ 2017-03-22 23:41 郑斌blog 阅读(1031) 评论(0) 推荐(0) 编辑
摘要:特征 完全二叉树是指除了最后一层之外,其他每一层的结点数都是满的。最后一层如果也满了,是一颗满二叉树,也是完全二叉树。最后一层如果不满,缺少的结点也全部的集中在左边,那也是一颗完全二叉树。 下面介绍一个简单应用,完全二叉树的相关操作以后补充。 判断一棵二叉树是否为完全二叉树 阅读全文
posted @ 2017-03-19 21:38 郑斌blog 阅读(813) 评论(0) 推荐(0) 编辑
摘要:特征 1、空树是平衡二叉树。2、如果一棵树不为空,并且其中所有的子树都满足各自的左子树与右子树的高度差都不超过 1。 下面介绍一个简单应用,平衡二叉树的相关操作以后补充。 判断一棵二叉树是否为平衡二叉树 给定一颗二叉树的头结点 head,判断一棵树是否是平衡二叉树。 1.1、左子树是否为平衡二叉树1 阅读全文
posted @ 2017-03-19 21:35 郑斌blog 阅读(729) 评论(0) 推荐(0) 编辑
摘要:系列文章:数据结构与算法系列——从菜鸟到入门 层次遍历 二叉树的层次遍历是指,从二叉树的第一层(根结点)开始,从上至下逐层遍历,在同一层中从左至右依次遍历。 按层打印 按层打印要求,在不同的层打印后加上换行。问题的关键就是如何知道该换行了。只需要两个 node 类型的变量 last 和 nlast 阅读全文
posted @ 2017-03-18 18:44 郑斌blog 阅读(6419) 评论(0) 推荐(0) 编辑
摘要:简述 二叉树的遍历分为先序遍历、中序遍历和后序遍历。如下图所示: 递归遍历 递归遍历实现比较简单,递归利用函数栈来保存信息。 非递归遍历 非递归需要额外自己申请数据结构来代替函数栈。 先序遍历: 1.申请一个栈 stack。然后将头结点 head 压入 stack 中。 2.从 stack 中弹出栈 阅读全文
posted @ 2017-03-17 22:52 郑斌blog 阅读(1629) 评论(0) 推荐(0) 编辑
摘要:系列文章:数据结构与算法系列——从菜鸟到入门 简述 计数排序基于桶排序。 比如待排数组 A[5]={101, 100, 103, 102, 105}; 那么就需要建造 105(max)-100(min)+1=6 大小的临时数组,将这 5 个元素按照,值减 100(min) 作为下标存储在临时数组中。 阅读全文
posted @ 2017-03-16 18:46 郑斌blog 阅读(487) 评论(0) 推荐(0) 编辑
摘要:系列文章:数据结构与算法系列——从菜鸟到入门 排序过程 以数组 A[6]={23, 14, 101, 72, 84, 11}为例,调用基数排序过程如下图所示: 基本思想是:将整数按位切割成不同的数字,然后对每个数的同一位进行排序。具体做法:将所有待排序数值统一为同样的数位长度,数位较短的数前面补零。 阅读全文
posted @ 2017-03-16 17:33 郑斌blog 阅读(1893) 评论(0) 推荐(0) 编辑
摘要:系列文章:数据结构与算法系列——从菜鸟到入门 简述 归并排序是将两个或两个以上的有序表组合成一个新的有序表。 其基本思想是:先将 N 个数据看成 N 个长度为 1 的表,将相邻的表成对合并,得到长度为 2 的 N/2 个有序表,进一步将相邻的合并,得到长度为 4 的 N/4 个有序表,以此类推,直到 阅读全文
posted @ 2017-03-16 12:34 郑斌blog 阅读(1274) 评论(0) 推荐(0) 编辑
摘要:持续更新系列。参考自:《数据结构与算法分析——Java语言描述》、《算法导论》排序 数据结构——快速排序 数据结构——堆排序 阅读全文
posted @ 2017-03-15 21:08 郑斌blog 阅读(2799) 评论(4) 推荐(3) 编辑
摘要:系列文章:数据结构与算法系列——从菜鸟到入门 什么是堆? 堆数据结构是一种数组对象,它可以被视为一棵完全二叉树。树中每个节点与数组中存放该结点值的那个元素对应。树的每一层都是填满的,最后一层可能除外(最后一层从最结点的左子树开始填)。如果给定了某个结点的下标 i,那么其父结点为 PARENT(i)= 阅读全文
posted @ 2017-03-15 20:59 郑斌blog 阅读(2271) 评论(0) 推荐(0) 编辑
摘要:系列文章:数据结构与算法系列——从菜鸟到入门 描述 快速排序是基于分治模式的,下面按分治模式来进行分析: 分解: 数组 A[p..r]被划分成两个(可能空)子数组,A[p..q-1]和 A[q+1..r],使得 A[p..q-1]中的每个元素都小于等于 A(q),也小于等于 A[q+1..r]中的元 阅读全文
posted @ 2017-03-15 12:19 郑斌blog 阅读(2474) 评论(0) 推荐(0) 编辑
摘要:红黑树的本质就是一个二叉查找(排序树)。 红黑树的五条性质: 每个节点非红即黑 根节点为黑 红节点的两个子节点都为黑 每个叶子节点都为黑 对于任一节点而言,其到叶子节点的每一条路径都包含相同数目的黑节点 详细:https://github.com/julycoding/The-Art-Of-Prog 阅读全文
posted @ 2017-02-16 17:28 郑斌blog 阅读(472) 评论(0) 推荐(0) 编辑
摘要:二叉排序树又称二叉查找树(Binary Search Tree,简称BST),它可以是一棵空树,若非空时具有以下性质: 若根结点的左子树非空,则左子树上的所有结点的关键字均小于等于根节点的关键字值; 若根结点的右子树非空,则右子树上所有的结点的关键字均大于等于根节点的关键字值; 根结点的左、右子树也 阅读全文
posted @ 2017-02-12 19:54 郑斌blog 阅读(486) 评论(0) 推荐(0) 编辑
摘要:摘要 JDK1.8相较于1.7对HashMap做了很大的优化,比如加入了新数据结构红黑树、Hash算法的优化和扩容的优化。 本篇结合这些区别,探索HashMap的结构实现和功能原理。 存储结构-字段 从数据结构来看,HashMap是数组+链表+红黑树实现的,如图所示: HashMap中重要的几个属性 阅读全文
posted @ 2017-02-10 22:03 郑斌blog 阅读(903) 评论(0) 推荐(0) 编辑
摘要:简述: ArrayList可以理解为动态数组,与Java中的数组相比,它的容量能动态增长。超出限制时会增加50%容量,用System.arraycopy()复制到新的数组中,因此最好能给出数组大小的预估值; 容量大小也可以在程序中通过ensureCapacity(int minCapacity)方法 阅读全文
posted @ 2017-02-08 17:02 郑斌blog 阅读(669) 评论(0) 推荐(0) 编辑
摘要:数据结构 LinkedList是基于链表结构实现,所以在LinkedList类中包含了first和last两个指针(类型为Node)。Node中包含了对prev节点、next节点的引用,这样就构成了双向的链表。 存储 1.add(E e)方法 该方法首先声明一个新Node l,将链表的最后一个Nod 阅读全文
posted @ 2017-02-08 14:20 郑斌blog 阅读(4461) 评论(0) 推荐(0) 编辑
摘要:类声明: 概述: 线程不安全; <Key, Value>两者都可以为null; 不保证映射的顺序,特别是它不保证该顺序恒久不变; HashMap使用Iterator; HashMap中hash数组的默认大小是16,增长方式一定是2的指数倍; HashMap的数据结构: 在Java语言中,最基本的结构 阅读全文
posted @ 2016-07-19 12:21 郑斌blog 阅读(1364) 评论(0) 推荐(1) 编辑
摘要:结点类: 单向链表类: 单向链表的反转: 在线编程: 牛客网——《剑指Offer》-反转链表 阅读全文
posted @ 2016-07-17 11:46 郑斌blog 阅读(657) 评论(0) 推荐(0) 编辑
摘要:相关概念 存储结构: 遍历: 遍历算法: 声明二叉树结点类 声明二叉树类 和 由先根遍历与中根遍历构造二叉树 建立一颗二叉树必须明确以下两点: 先根次序或后根次序反映双亲与孩子结点的层次关系,中根次序反映兄弟结点间的左右次序。所以,已知先根和中根两种遍历序列,或中根和后根两种遍历序列才能够唯一确定一 阅读全文
posted @ 2016-07-16 23:54 郑斌blog 阅读(1265) 评论(0) 推荐(0) 编辑

1
点击右上角即可分享
微信分享提示