数据结构与算法
文章平均质量分 91
CodingSoldier
这个作者很懒,什么都没留下…
展开
-
Java8 HashMap源码解析
HashMap底层数据结构HashMap底层数据结构是 数组 + 链表,当链表长度大于等于8,链表将转为红黑树。HashMap的一些重要成员变量// 初始容量大小,1左移4位是10000,转为十进制是16static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16/** * 同时满足 HashMap元素超过64个,且链表长度超过8 才将链表转为红黑树 */// 树化阀值static final int.原创 2021-11-03 22:14:29 · 601 阅读 · 0 评论 -
二叉树与递归
上图是一颗二叉树,二叉树的特点是“二叉树的每个节点的左右子树也是一颗二叉树”,需要特殊说明的是,“空”也是一颗二叉树。二叉树可以拆分为多个小二叉树,小二叉树的性质和大二叉树的性质完全一样。这种性质和递归算法很相似,递归算法也是把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。我们往往可以使用递归算法求解二叉树的一些问题。LeetCode第104道问题,二叉树的最大深度。题目地址:https://leetcode-cn.com/problems/maximum-depth-..原创 2020-11-18 21:50:09 · 371 阅读 · 0 评论 -
移除链表元素(小技巧:设立虚拟头结点)
LeetCode第203道问题,移除链表元素。题目地址:https://leetcode-cn.com/problems/remove-linked-list-elements/删除链表中等于给定值val的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5/** * ListNode类 */public class ListNode { public ..原创 2020-11-14 22:38:22 · 331 阅读 · 0 评论 -
反转链表
LeetCode第206道问题,反转链表。题目地址:https://leetcode-cn.com/problems/reverse-linked-list/反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?/** * ListNode类 */public class ListNode {原创 2020-11-14 19:25:08 · 115 阅读 · 0 评论 -
图与邻接矩阵、邻接表
本文来源于liuyubobobo的“算法与数据结构--综合提升篇”视频教程图的基本概念先了解图的一些概念。图在数学、代码中的实现方式,一般来说使用邻接矩阵表示稠密图,使用邻接表表示稀疏图。下面会对邻接矩阵、邻接表加以说明。实现代码:// 稠密图 -- 邻接矩阵public class DenseGraph { private int node...原创 2019-10-29 22:12:33 · 333 阅读 · 0 评论 -
并查集
本文来源于liuyubobobo的“算法与数据结构--综合提升篇”视频教程并查集是一种树形的数据结构,可以用户判断数据是否相连接的问题。例如在下图中任意取两个点,怎么判断这两个点是否连接在一起呢?上图中的这个问题太复杂,举个简单的例子来练手。使用quick find算法实现并查集public class QuickFind { private int[] ...原创 2019-10-27 13:45:11 · 134 阅读 · 0 评论 -
快速排序
本文来源于liuyubobobo的“算法与数据结构--综合提升篇”视频教程代码如下: // 快速排序 public void quickSort(int[] arr){ quickSort(arr, 0, arr.length-1); } // 快速排序私有方法 private void quickSort(int[] ar...原创 2019-10-20 17:03:20 · 795 阅读 · 0 评论 -
归并排序
本文来源于liuyubobobo的“算法与数据结构--综合提升篇”视频教程选择排序、插入排序都是O(n^2)复杂度的排序算法(即这两种算法都使用了两重for循环)归并排序是O(n log n)时间复杂度的排序算法归并排序思路上面归并思路中最理解、最难处理的点在于:相邻数组段合并时,怎样才能实现元素排序。这就需要创建一个临时数组储存数组段中的元素(使用空间换时间的思想在算法中...原创 2019-10-16 22:21:32 · 212 阅读 · 0 评论 -
选择排序、插入排序
本文来源于liuyubobobo的“算法与数据结构--综合提升篇”视频教程选择排序// 选择排序public static void selectionSort(int arr[]) { for (int i = 0; i < arr.length; i++) { int minIndex = i; //找出未排序元素最小值的下标 ...原创 2019-10-14 22:42:07 · 172 阅读 · 0 评论 -
《玩转数据结构 从入门到进阶》平衡二叉树AVL
本文来源于liuyubobobo的“玩转数据结构 从入门到进阶”视频教程平衡二叉树的定义:对于任意一个节点,左子树和右子树的高度差不能超过1。使用代码实现AVL需要用到我之前的一篇《玩转数据结构 从入门到进阶》二分搜索树 Binary Search Tree 中的代码,建议先看这篇文章。先在二分搜索树的代码上加上计算平衡因子的代码package com.datastru...原创 2019-08-22 20:37:07 · 258 阅读 · 0 评论 -
《玩转数据结构 从入门到进阶》Tire字典树
本文来源于liuyubobobo的“玩转数据结构 从入门到进阶”视频教程上图是一个Trie字典树1、字典树是一个多叉树2、字典树的Node节点使用字典结构(java中叫map)储存与子节点的关系。3、沿着根节点的路径搜索,可以发现字典树中存储着单词{"cat", "dog", "deer", "panada"}这些单词。并且插入、查询一个字符串的效率只跟字符串的长度有关。当...原创 2019-08-15 20:22:18 · 258 阅读 · 1 评论 -
《玩转数据结构 从入门到进阶》红黑树
本文来源于liuyubobobo的“玩转数据结构 从入门到进阶”视频教程本教程是基于二分搜索树实现红黑树,请先看《玩转数据结构 从入门到进阶》二分搜索树 Binary Search Tree红黑树也有左旋转、右旋转这种操作,如果不了解,请先阅读《玩转数据结构 从入门到进阶》平衡二叉树AVL由于红黑树的定义太过于复杂,所以先学习2-3树,然后通过红黑树与2-3树对比,才能更好的理解...原创 2019-08-24 18:53:08 · 351 阅读 · 0 评论 -
《玩转数据结构 从入门到进阶》二叉堆
本文来源于liuyubobobo的“玩转数据结构 从入门到进阶”视频教程先介绍几个概念1、满二叉树如下图:2、完全二叉树3、二叉堆使用数组实现一个最大二叉堆。上图中的树只是数组存储元素的形象画法,实际存储数据的还是数组,但数组元素之间具备树那样的关系。假设当前节点下标为i(i也是数组的下标),最大堆的下标存在这样的关系:父亲节点下标与当前节点下...原创 2019-08-08 22:41:54 · 279 阅读 · 0 评论 -
《玩转数据结构 从入门到进阶》 循环数组实现队列
本文来源于liuyubobobo的“玩转数据结构 从入门到进阶”视频教程队列是一种特殊的线性表,特殊之处在于它只允许在表的前端进行删除操作,而在表的后端进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。假设我们使用数组实现队列,请看下图入队操作很快速,只需要在队尾添加元素即可。但是,出队操作就耗时了,把队头元素删除并返回给调用者后,还需要把数组中的所有元素往前移动,...原创 2019-08-02 21:54:45 · 299 阅读 · 0 评论 -
《玩转数据结构 从入门到进阶》二分搜索树 Binary Search Tree
本文来源于liuyubobobo的“玩转数据结构 从入门到进阶”视频教程上图是一个Binary Search Tree,因汉字数量庞大,就有了很多种翻译,如:二分搜索树、二叉搜索树、……………二分搜索树以二叉树为基础,但多了两个特点:1、二分搜索树节点的值具有可比较性。2、每个节点都比它左子树的任意元素大,而且比右子树的任意元素小(此文不讨论有重复元素的树)。下面使用jav...原创 2019-08-06 22:53:38 · 312 阅读 · 0 评论 -
《玩转数据结构 从入门到进阶》 链表实现队列
本文来源于liuyubobobo的“玩转数据结构 从入门到进阶”视频教程链表结构如下图,链表节点包含一个e属性和next属性使用java代码实现链表节点// 链表节点private class Node{ // 当前节点的值 public E e; // 当前节点的next属性指向下一个节点 public Node next; publ...原创 2019-08-02 21:55:08 · 177 阅读 · 0 评论