
数据结构和算法
文章平均质量分 85
数据结构、算法;LeetCode、LintCode的算法题
Elson_6
Talk is cheap, show me the code.
展开
-
算法:模拟类
常见模拟类算法。原创 2023-03-09 11:49:21 · 202 阅读 · 0 评论 -
算法:动态规划
动态规划(英语:Dynamic programming,简称 DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题,并且记录所有子问题的结果,因此动态规划方法所耗时间往往远少于朴素解法。动态规划有自底向上和自顶向下两种解决问题的方式。自顶向下即记忆化递归,自底向上就是递推。原创 2023-03-07 00:11:30 · 325 阅读 · 0 评论 -
算法:链表
链表(Linked List)是最简单的线性的、动态数据结构。理解它是理解树结构、图结构的基础。链表在插入数据的时候可以达到 O(1) 的复杂度,但是查找一个节点或者访问特定编号的节点则需要 O(n) 的时间。原创 2023-03-02 22:04:18 · 798 阅读 · 0 评论 -
算法:二分法查找
二分查找算法 ,是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。原创 2023-03-02 14:26:05 · 112 阅读 · 0 评论 -
算法:二叉树
常见二叉树的算法原创 2023-03-01 16:12:44 · 112 阅读 · 0 评论 -
算法:二叉查找树
二叉搜索树的常见算法。原创 2023-03-01 15:11:09 · 296 阅读 · 0 评论 -
算法:接雨水
LeetCode接雨水原创 2023-02-27 21:16:18 · 800 阅读 · 0 评论 -
算法:LRU算法
LRU算法的特点是:当资源不足需要清除数据时,最近被使用过的数据不会被清除(即:只会清除最近没有使用的数据)。要实现这个特点,就需要维护一个链表来表达数据被使用的顺序。同时我们知道链表的查询效率较低,所以需要结合散列表的特点(查询效率高)来实现这个数据结构。原创 2023-02-27 14:32:10 · 132 阅读 · 0 评论 -
算法:排序算法
几种常见排序算法的代码实现。原创 2023-02-26 13:44:51 · 90 阅读 · 0 评论 -
数据结构(Tree) — 二叉树
二叉树前序、中序、后序的遍历方式,及二叉树的构建。原创 2023-02-25 21:33:21 · 129 阅读 · 0 评论 -
面试题:HashMap & ConcurrentHashMap
关于 HashMap 和 ConcurrentHashMap 的面试题。原创 2022-10-25 14:50:30 · 605 阅读 · 0 评论 -
并发容器(五) — ConcurrentHashMap 源码分析(JDK1.8)
在高并发下 HashMap是线程不安全的,主要原因是在同一个桶中并发操作会带来问题,为此我们只需要解决并发操作同一个桶的安全性问题即可,因此在SDK提供的ConcurrentHashMap类中通过分段锁(JDK1.7)或CAS+Sync(JDK1.8)来保证操作的安全性。原创 2022-10-25 13:32:56 · 469 阅读 · 0 评论 -
并发容器(五) — ConcurrentHashMap 源码分析(JDK1.7)
我们知道,在高并发下 HashMap是线程不安全的,主要原因是在同一个桶中并发操作会带来问题。为此我们只需要解决并发操作同一个桶的安全性问题即可,因此在SDK提供的ConcurrentHashMap类中通过分段锁(JDK1.7)或CAS+Sync(JDK1.8)来保证操作的安全性。原创 2022-10-24 22:32:58 · 871 阅读 · 0 评论 -
HashMap(三) — HashMap 高并发场景下的问题分析
高并发下的HashMap我们知道不管是哪个版本的HashMap都是线程不安全的。本文主要分析JDK1.7 中HashMap环状链表的形成过程。原创 2022-10-24 11:34:19 · 1660 阅读 · 0 评论 -
并发容器(四) — DelayQueue 源码解析
DelayQueue 源码解析一、概述二、源码解析1. 入队2. 出队3. 延迟功能的实现一、概述DelayQueue 是一个无界阻塞队列,它提供了在指定时间才能获取队列元素的功能,队列头元素是最接近过期的元素 (通过最小堆实现)。DelayQueue 队列本身不具备存储能力,而是在内部通过 PriorityQueue 队列来实现存储功能和获取最近过期元素功能。PriorityQueue ...原创 2020-03-19 18:18:15 · 229 阅读 · 0 评论 -
并发容器(三) — PriorityBlockingQueue(优先队列)源码解析
PriorityBlockingQueue源码解析一、概述二、三、一、概述PriorityBlockingQueue 是一个支持优先级的无界阻塞队列。队列内部使用 数组 存储数据。由于数组初始化时,长度已经确定,而PriorityBlockingQueue又是一个无界队列,因此内部存在自动扩容机制 (类似ArrayList)。PriorityBlockingQueue 使用最小堆来实现...原创 2020-03-19 14:36:12 · 275 阅读 · 0 评论 -
数据结构 — 二叉堆
二叉堆一、概述二、堆的两种类型1. 最大堆2. 最小堆三、代码实现一、概述二叉堆本质上是一种完全二叉树,二叉堆有两种类型:最大堆最小堆完全二叉树:数据结构—完全二叉树二、堆的两种类型1. 最大堆什么是最大堆呢?最大堆任何一个父节点的值,都大于等于它左右孩子节点的值。2. 最小堆什么是最小堆呢?最小堆任何一个父节点的值,都小于等于它左右孩子节点的值。三、代码实现...原创 2020-03-18 23:16:32 · 458 阅读 · 0 评论 -
并发容器(二) — ArrayBlockingQueue源码解析
ArrayBlockingQueue源码解析一、概述二、源码解析1. 构造函数2. 实际入队、出队的操作3. 有阻塞功能的入队、出队操作4. 有超时且非阻塞的入队、出队操作三、小结一、概述ArrayBlockingQueue 是一个用数组实现的有界阻塞队列。ArrayBlockingQueue的数据结构:上图涉及:ReentrientLock、Condition、BlockingQueu...原创 2020-03-17 16:27:10 · 219 阅读 · 1 评论 -
数据结构(List) — LinkedList 源码分析
一、概述二、类图三、源码分析一、概述版本: JDK 1.8public class LinkedList<E> extends AbstractSequentialList&am原创 2018-05-23 09:17:46 · 368 阅读 · 0 评论 -
数据结构(Queue) — Queue 综述
一、概述队列 是一种特殊的线性表,只允许在表的前面(队头)进行删除操作,而在表的后面(队尾)进行插入操作。即最先插入的元素最先被删除;因此队列又称为 先进先出(FIFO) 的线性表。还有一种数据结构是 栈,它的特点是 后入先出(FILO),即最先进入的元素最后才出来。二、类图三、...原创 2018-05-31 15:18:39 · 1287 阅读 · 0 评论 -
数据结构(List) — ArrayList 源码分析
文章目录@[toc]一、概述二、类图三、源码分析3.1 初始化3.2 增、删、改、查3.2.1 增3.2.2 删3.2.3 改3.2.4 查3.3 序列化3.4 迭代器3.5 其他四、小结一、概述版本: JDK 1.8Java中,数组在声明时,需要确定其数组长度,所以不具备自动扩容的特点;而 ArrayList 底层实现是数组,且具备自扩容的能力,所以可以把 ArrayList 理解为是一个 动态数组。同时,由于数组的内存地址是连续的,所以 具备随机快速访问的能力 ,通过下标查询数据的 时间复杂原创 2018-05-17 16:08:26 · 350 阅读 · 0 评论 -
数据结构(List) — ArrayQueue 源码分析
一、概述二、类图三、源码分析四、小结一、概述版本: JDK1.8ArrayQueue 是一个循环队列(Queue),继承了 AbstractList 抽象类,内部通过数组的方式来实现。二、类图三、源码分析public class ArrayQueue<T> extends AbstractList<T&g...原创 2018-05-18 15:27:17 · 3648 阅读 · 5 评论 -
数据结构(栈) — Stack 源码解析
一、概述Vector 类似 ArrayList,但 Vector 是线程安全的;Stack 继承自 Vector,实现一个后进先出的数据结构(栈)。二、源码Stack 提供5个API:push() 将元素压进栈;pop() 将栈顶元素弹出;peek() 得到栈顶的元素;empty() 判断栈是否为空;search() 检测一个元素在堆栈中的位置。public class S...原创 2018-11-24 00:22:21 · 259 阅读 · 0 评论 -
数据结构(Map) — SparseArray 源码分析
一、概述SparseArray 通过两个数组来实现 <Key, Value> 的数据结构;还有三个类似的数据结构:SparseBooleanArray -> value 为 booleanSparseIntArray -> value 为 intparseLongArray -> value 为 long与SparseArray的区别在于value...原创 2018-10-20 01:22:24 · 328 阅读 · 0 评论 -
数据结构 — 原码, 反码, 补码 详解
原码, 反码, 补码 详解作者:张子秋出处:http://www.cnblogs.com/zhangziqiu/本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助!一、机器数和真值在学习原码, 反码和...转载 2018-10-19 13:17:55 · 648 阅读 · 0 评论 -
HashMap(二) — 浅析hash函数及tableSizeFor函数
文章目录@[toc]一、HashMap#hash()二、HashMap#tableSizeFor()原文 (HashMap源码注解 之 静态工具方法hash()、tableSizeFor()(四)) 已经解释的很到位了,这里只是转载了过来。版本: JDK 1.8一、HashMap#hash()为什么要有HashMap的hash()方法,难道不能直接使用KV中K原有的hash值吗?在Hash...转载 2019-09-29 18:41:17 · 248 阅读 · 1 评论 -
HashMap(一) — HashMap 源码分析
本文主要介绍JDK1.8的HashMap原创 2019-09-30 11:09:40 · 871 阅读 · 0 评论