两数三数四数求和问题总结

LeetCode 刷了近 20 道题了,对于我来说,还是有一定的难度的,为了对题目类型及思路有个整体的把握,今天回头看了看这些题目,发现还有很很多相似的地方的,本篇就整理一下,前二十道出现频率最高的求和问题。比如:两数之和等于目标值;三数之和最接近目标值;三数之和为零;四数之和为零。

Read More

二叉查找树节添加删除节点的细节

二叉查找树,也叫二叉搜索树,优势就在于查找,跟二分查找一样,时间复杂度为 O(logn),如何做到的呢?就在于构造二叉树的时候,有这样一个规定,即左边的节点必须小于根节点,右边的节点必须大于跟节点,下面就来实现将任意无序的节点构造成一个二叉查找树的过程。

Read More

通过前序遍历反向创建二叉树

上一篇文章介绍了二叉树的一种创建方法,即一个一个创建节点,再建立它们之间的关系,当节点很多时,这样创建显得比较 low,那么如果给定二叉树排列顺序的情况下,如何通过来创建二叉树呢?本文主要实现给定前序遍历顺序来动态创建二叉树的过程。

Read More

二叉树的创建以及它的遍历过程

相比数组和链表,二叉树是一种比较独特的数据结构,对于二叉树的一些概念和规律的内容,这里就不多描述和证明了,本篇主要来看下二叉树的构造过程以及几种遍历过程。

Read More

HashMap 源码分析(一)

HashMap 被设计成专门用来存储键值对(key-value)形式的数据,每一个元素都是一个 Entry<K,V> 节点;它底层的数据结构是哈希表,它是一个数组,同时也是一个链表,简单来说,就是根据节点的 key 的 hash 值,来决定该元素存放在数组的位置,hash 值相同,则在该位置后面以链表的形式存储元素,本文简单分析下 HashMap 的源码,基于 JDK 1.8 。

Read More

基于 LinkedList 的队列的源码分析

队列是一种只允许在一端进行插入操作,而在另一端进行删除操作的线性表。插入的一段称之为队尾,删除的一段称之为队头。之前分析过 LinkedList 的时候就提到,它是一种链式结构,同时还是一个队列,所以,这篇分析其实很简单了,都是基于之前分析过的的插入删除的方法。

Read More