随笔分类 -  数据结构与算法

摘要:一. 快速排序之局限 快速排序的平均时间复杂度为O(nlogn)。其核心步骤是:先从待排序数组中选定一个元素作为基准(pivot),通过一趟排序将数组分成两部分,使得左边部分的元素都小于等于基准元素,右边部分的元素都大于等于基准元素;接着对划分后的左右子数组分别递归进行上述操作,即再次选择基准元素划 阅读全文
posted @ 2024-12-20 23:48 听到微笑 阅读(114) 评论(0) 推荐(0) 编辑
摘要:一. 背景 在业务开发中,在并发量很高的情况下,通常会使用缓存对系统查询性能进行优化,在缓存命中率很高的情况下,缓存的使用能够大幅提升系统查询性能。但是在缓存命中率非常低场景下,如果采用传统缓存读取模式,大部分的请求会穿透至数据库,造成数据库的巨大压力。 例如:最近上线一个“贵族”功能,由于贵族价格 阅读全文
posted @ 2022-04-03 13:59 听到微笑 阅读(28) 评论(0) 推荐(0) 编辑
摘要:更多博文请关注:https://blog.bigcoder.cn 一. 什么是Levenshtein Distance Levenshtein Distance,一般称为编辑距离(Edit Distance,Levenshtein Distance只是编辑距离的其中一种)或者莱文斯坦距离,算法概念是 阅读全文
posted @ 2021-04-17 22:25 听到微笑 阅读(314) 评论(0) 推荐(0) 编辑
摘要:博主最新博文,请关注:听到微笑的博客 给你一个字符串 s,找到 s 中最长的回文子串。 示例 1: 输入:s = “babad” 输出:“bab” 解释:“aba” 同样是符合题意的答案。 示例 2: 输入:s = “cbbd” 输出:“bb” 示例 3: 输入:s = “a” 输出:“a” 示例 阅读全文
posted @ 2021-03-20 18:05 听到微笑 阅读(9) 评论(0) 推荐(0) 编辑
摘要:HTTP是超文本传输协议,所以HTTP协议中请求、相应都是以ASCII字符方式传输,如果要传输二进制需要经过BASE64或MIME等编码(因为HTTP协议pop3、smtp邮件协议都是针对文本的,而FTP支持传输二进制数据,即不需要经过编码转换成字符型数据) HTTP传输字节流时为什么会用Base6 阅读全文
posted @ 2019-12-22 12:04 听到微笑 阅读(7) 评论(0) 推荐(0) 编辑
摘要:概念 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。通常采用堆数据结构来实现。 优先队列的实现:优先队列通常用堆来实现 阅读全文
posted @ 2019-04-26 10:38 听到微笑 阅读(7) 评论(0) 推荐(0) 编辑
摘要:题目描述 求一个集合的所有结合,例如集合{A,B,C}的所有子集为:{},{A,B,C},{A,B},{A,C},{B,C},{A},{B},{C}。 思路 实际上求子集问题是一个经典的DFS,每一次选择某个元素时,都会面临两个选择,一个是不选一个是选: 第一步:选择A元素,有两种选择,一个是选A, 阅读全文
posted @ 2019-03-20 18:33 听到微笑 阅读(4) 评论(0) 推荐(0) 编辑
摘要:题目 题目:剪邮票 如【图1.jpg】, 有12张连在一起的12生肖的邮票。 现在你要从中剪下5张来,要求必须是连着的。 (仅仅连接一个角不算相连) 比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。 请你计算,一共有多少种不同的剪取方法。 请填写表示方案数目的整数。 注意: 阅读全文
posted @ 2019-03-20 18:15 听到微笑 阅读(4) 评论(0) 推荐(0) 编辑
摘要:基数排序(radix sort),相对于常见的比较排序,基数排序是一种分配式排序,即通过将所有数字分配到应在的位置最后再覆盖到原数组完成排序的过程。 基数排序思路 我们先给出一个待排序数组,和10个桶(桶从0开始编号): 我们需要依次将数组中取出来,分别放入10个桶中,入桶的规则:在第一回合中将数组 阅读全文
posted @ 2019-03-07 20:08 听到微笑 阅读(17) 评论(0) 推荐(0) 编辑
摘要:概述 上一篇我们学习了堆排序,今天我们来研究一下桶排序,桶排序的思想中也是将排序问题小型化,然后达到排序的目的。在我看来桶排序就是对插入排序的一种优化。 桶排序的思路 相比与生涩难懂的代码,图解的方式来描述问题是一个非常好的方法,直观的图片永远会比抽象的代码更容易理解。话不多说直接上图: 我们给出一 阅读全文
posted @ 2019-03-05 17:10 听到微笑 阅读(10) 评论(0) 推荐(0) 编辑
摘要:概述 堆排序是我们常说的十大排序算法中的一种,堆排序也是数据结构中比较重要的一个知识点,我们今天就来好好探究一下堆排序。在说堆排序之前,我们就必须先明白什么是二叉堆,因为堆排序就是在二叉堆的基础上完成的。 什么是二叉堆 话不多说直接上图: 仔细观察上图的特点: 1. 二叉堆是一颗完全二叉树。 2. 阅读全文
posted @ 2019-03-04 20:30 听到微笑 阅读(2) 评论(0) 推荐(0) 编辑
摘要:概述 全排列在很多竞赛题中会经常用到,因为只有枚举出数组中元素的所有可能的组合情况,才能进行题目的下一步操作,那么这篇文章就用递归的思想来实现全排列。 首先我们先举一个最简单的全排列的例子,给出数组{1,2,3},那么这个数组的全排列就有6种情况: {1,2,3} {1,3,2} {2,1,3} { 阅读全文
posted @ 2019-03-04 14:58 听到微笑 阅读(5) 评论(0) 推荐(0) 编辑
摘要:题目 给定一个方阵,定义连通性:上下左右相邻,并且值相同。可以想象一张地图,不同的区域被染成了不同的颜色。现在我们需要判断图中任意两点是否在同一个连通区间中。 输入: 整数N(N<50),代表矩阵的行列数 输入N行,每行N个字符,代表矩阵中的元素 输入一个整数M(M<1000)表示询问次数 输入M行 阅读全文
posted @ 2019-02-16 12:25 听到微笑 阅读(9) 评论(0) 推荐(0) 编辑
摘要:二叉树的前序、中序、后序遍历我想大家应该都很熟悉了,那我们今天就来讲一下二叉树的层次遍历。 二叉树的前序、中序、后序遍历需要用到栈(递归的过程也就是一个栈),层次遍历需要借助队列这个数据结构。 层次遍历的思路 我们给出一个二叉树: 这棵二叉树的层次遍历次序为:A、B、C、D、F、G 以人的思维来看层 阅读全文
posted @ 2019-02-15 14:44 听到微笑 阅读(7) 评论(0) 推荐(0) 编辑
摘要:到底什么是最小生成树 最小生成树算法应用范围比较广,例如在网络的铺设当中难免会出现环路,需要要生成树算法来取出网络中的环,防止网络风暴的发生。那到底什么是最小生成树呢?我这里就不给严谨的定义了,这种定义网上一搜一大堆,但是往往严谨的定义都不太容易理解。下面我就给出一个更容易理解的定义。 在理解“最小 阅读全文
posted @ 2019-01-21 15:40 听到微笑 阅读(11) 评论(0) 推荐(0) 编辑
摘要:了解拓扑排序 看到这篇文章的博友可能已经对拓扑排序有了一定的了解,但是在这里我们还是需要明确一下什么是拓扑排序。 拓扑排序的严谨定义网上一搜一大堆,我就不copy了,我总结几点拓扑排序的特点: 1. 拓扑排序是建立在有向无环图(DAG)的基础上的。 2.拓扑排序就是将DAG以线性方式进行排序。即对任 阅读全文
posted @ 2019-01-19 16:47 听到微笑 阅读(5) 评论(0) 推荐(0) 编辑
摘要:理解平衡二叉树 在解决平衡二叉树动平衡问题,我们先来明确什么是平衡二叉树: 平衡二叉树是二叉搜索树的一种特殊情况,所以在二叉搜索树的基础上加上了如下定义: 平衡因子:我们将二叉树中各个结点的左右子树的高度差称为该节点的平衡因子。 平衡二叉树:就是在二叉搜索树的基础上,所有结点的平衡因子都小于等于一。 阅读全文
posted @ 2019-01-11 16:25 听到微笑 阅读(4) 评论(0) 推荐(0) 编辑

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