随笔分类 - 重学数据结构与算法
摘要:给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最小深度 2. Python # Definitio
阅读全文
摘要:搜索算法==》在图中找出从一个顶点出发,到另一个顶点的路径 public class Graph { //无向图 private int v; //顶点的个数 private LinkedList<Integer> adj[]; //邻接表 public Graph(int v) { this.v
阅读全文
摘要:图的存储==》 1、邻接矩阵存储方法==》底层依赖二维数组 2、邻接表存储方法==》数组/散列表+链表
阅读全文
摘要:堆Heap==》堆排序:原地、O(nlogn) 堆==》堆是一个完全二叉树;堆中每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值==》大顶堆(小顶堆) 实现一个堆==》完全二叉树比较适合用数组来存储 数组中下标为i的节点的左子节点,就是下标为i*2的节点,右子节点就是下标为i*2+1的
阅读全文
摘要:实现网页爬虫中的URL去重功能==》 散列表、红黑树、跳表,都支持快速地插入、查找数据,内存消耗呢? 位图==》比较特殊的散列表 我们有 1 千万个整数,整数的范围在 1 到 1 亿之间。如何快速查找某个整数是否在这 1 千万个整数中呢?==》申请一个大小为 1 亿、数据类型为布尔类型(true 或
阅读全文
摘要:1、在海量数据中快速查找某个数据 2、为什么需要索引 业务和功能的本质==》“对数据的存储和计算”==》存储:数据结构;计算:算法 一旦存储的数据很多,那性能就成了这些系统要关注的终点,特别是在一些跟存储相关的基础系统(比如MySQL数据库、分布式文件系统等)、中间件(比如消息中间件RocketMQ
阅读全文
摘要:1、防止数据库中的用户信息被脱库 2、将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。 3、应用 安全加密==》MD5、SHA 唯一标识==》如果要在海量的图库中,搜索一张图是否存在,我们不能单纯地用图片的元信息(比如图
阅读全文
摘要:1、Word文档中的单词拼写检查功能 2、散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。 散列思想==》与数组的下标形成一一映射,所以利用数组支持根据下标随机访问的时候,时间复杂度是 O(1) 这一特性 散列表用的就是数组支持按照下标随机访问的时候
阅读全文
摘要:1、Redis使用跳表实现有序集合 Redis 中的有序集合支持的核心操作主要有下面这几个==》 插入一个数据; 删除一个数据; 查找一个数据; 按照区间查找数据(比如查找值在[100, 356]之间的数据); 跳表>红黑树 迭代输出有序序列。 2、跳表==》可以支持快速地插入、删除、查找操作,写起
阅读全文
摘要:1、二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0 2、代码 循环退出条件==》low<=high mid的取值==》low + (high - low)/2 low + ((h
阅读全文
摘要:1、冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序 2、排序算法的执行效率==》 最好情况、最坏情况、平均情况时间复杂度 时间复杂度的系数、常数、低阶:对同一阶时间复杂度的排序算法性能对比的时候,就要把系数、常数、低阶也考虑进来 比较次数和交换(或移动)次数 3、排序算
阅读全文
摘要:1、递归==》DFS深度优先搜索、前中后序二叉树遍历 递归求解问题的分解过程==》去的过程叫“递”,回来的过程叫“归”,基本上,所有的递归问题都可以用递推公式来表示 2、递归需要满足的三个条件==》 一个问题的解可以分解为几个子问题的解 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样
阅读全文
摘要:1、队列在线程池等有限资源池中的应用==》当我们向固定大小的线程池中请求一个线程时,如果线程池中没有空闲资源了,这个时候线程池如何处理这个请求?是拒绝请求还是排队请求?各种处理策略又是怎么实现的呢?==》队列Queue 非阻塞的处理方式:直接拒绝任务请求;阻塞的处理方式:将请求排队,等到有空闲线程时
阅读全文
摘要:1、浏览器的前进和后退功能==》使用两个栈,X 和 Y,我们把首次浏览的页面依次压入栈 X,当点击后退按钮时,再依次从栈 X 中出栈,并将出栈的数据依次放入栈 Y。当我们点击前进按钮时,我们依次从栈 Y 中取出数据,放入栈 X 中。当栈 X 中没有数据时,那就说明没有页面可以继续后退浏览了。当栈 Y
阅读全文
摘要:LRU缓存淘汰算法==》维护一个有序单链表,越靠近链表尾部的结点是越早之前访问的。当有一个新的数据被访问时,我们从链表头开始顺序遍历链表 1. 如果此数据之前已经被缓存在链表中了,我们遍历得到这个数据对应的结点,并将其从原来的位置删除,然后再插入到链表的头部。 2. 如果此数据没有在缓存链表中,又可
阅读全文
摘要:在大部分编程语言中,数组都是从0开始编号的,为什么数组要从0开始编号,而不是从1开始呢? 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 线性表:数组、链表、栈、队列 非线性表:二叉树、堆、图等 在非线性表中,数据之间并不是简单的前后关系 如何实现随机
阅读全文

浙公网安备 33010602011771号