![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法与数据结构
文章平均质量分 67
算法与数据结构
优惠券已抵扣
余额抵扣
还需支付
¥9.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
小麦China
来我公众号一起学习吧:xiaomaiChina
展开
-
C ++基础算法 | 串的模式匹配算法BF、KMP
串的模式匹配模式匹配是数据结构中字符串的一种基本运算,给定一个子串,要求在某个字符串中找出与该子串相同的所有子串,这就是模式匹配。假设P是给定的子串,T是待查找的字符串,要求从T中找出与P相同的所有子串,这个问题成为模式匹配问题。P称为模式,T称为目标。如果T中存在一个或多个模式为P的子串,就给出该子串在T中的位置,称为匹配成功;否则匹配失败。朴素的模式匹配算法(BF(BruteForce)算法)朴素模式匹配算法的基本思想是穷举法,即就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若.原创 2020-10-29 10:37:39 · 587 阅读 · 2 评论 -
十大排序算法原理及实现
算法概述冒泡排序及其优化 快速排序及其优化 直接插入排序及其优化 希尔排序及其误区明析 直接选择排序 堆排序 归并排序 计数排序 桶排序 基数排序算法分类十种常见排序算法可以分为两大类:非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。根据使用内外存分类.原创 2020-05-11 23:00:37 · 354 阅读 · 0 评论 -
排序算法 | 快速排序及其优化
快速排序(Quick Sort)快速排序(Quick Sort)是对冒泡排序的一种改进。快排的真谛在于极端情况下每次将概率等分1/2 每次小于这个数的放在前面大于的放在后面,即每次排序都找出了一个正确位置,使得下一次排序个数减少一半。快速排序使用分治的思想,通过一趟排序将待排序列分割成两部分,其中一部分的值均比另一部分的值小。之后分别对这两部分递归或者非递归的方式继续进行快速排序,以达到...原创 2020-05-03 17:39:08 · 563 阅读 · 0 评论 -
C ++基础数据结构算法 | 分治法(Divide and Conquer)
C++基础数据结构算法 | 分治法(Divide and Conquer)Divide分解成子问题 Conquer求解子问题 combine(merge)合并子解答 169. 多数元素 模板,分治divide(),解决conquer() 50. Pow(x, n) 215. 数组中的第K个最大元素 归排,取最后第k个 23. 合并K个升序链表 切割成两个相邻的list,...原创 2021-05-26 17:39:42 · 360 阅读 · 0 评论 -
经典考题总结
经典考题目录经典考题经典考题一 | 计算器(Calculator)经典考题二 |经典考题一 | 计算器(Calculator) 224. 基本计算器 递归+栈 227. 基本计算器 II 栈 772. 基本计算器 III 递归+栈 经典考题二 |...原创 2021-05-18 22:45:36 · 77 阅读 · 0 评论 -
C++实现二叉树的前中后层序遍历(递归和迭代)
C++实现二叉树的前中后和层序遍历(递归和非递归写法)参考以下图解,这个文章写得真好————————————————版权声明:本文为CSDN博主「Monster_ii」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/monster_ii/article/details/82115772...原创 2020-02-06 00:47:44 · 751 阅读 · 1 评论 -
C++基础数据结构 | 图(Graph)
C++基础数据结构 | 图(Graph)最小生成树MST总结 时间复杂度 Kruscal克鲁斯卡尔算法 并查集模版,边edges记录并排序,通过排序控制前后顺序,逐个边进行并查集,如果边的两端父节点不一样,那就合并 if(dsu.find(cur[0])==dsu.find(cur[1]))continue;用共同父节点剪枝 ElogV Prim普里姆算法 稀疏图E<V 顶点Vertex.原创 2021-04-29 10:49:42 · 577 阅读 · 0 评论 -
C++基础数据结构 | 树(Tree)
C++基础数据结构 | 树(Tree) 144. 二叉树的前序遍历 C++实现二叉树的前中后层序遍历(递归和迭代) 迭代和递归 94. 二叉树的中序遍历 145. 二叉树的后序遍历 102. 二叉树的层序遍历 107. 二叉树的层序遍历 II 10...原创 2021-04-27 11:35:50 · 768 阅读 · 0 评论 -
C++基础数据结构 | 链表(linked list)
C++基础数据结构 | 链表(linked list) 206. 反转链表 92. 反转链表 II 25. K 个一组翻转链表 复用92. 链表 II 2. 两数相加 carry位加一 445. 两数相加 II 栈,carry位加一 21. 合并两个有序链表 23. 合并K个升序链表 d...原创 2021-04-22 22:44:42 · 143 阅读 · 0 评论 -
C ++基础数据结构 | 栈和队列(Stack & Queue)
C ++基础数据结构 | 栈和队列(Stack & Queue) 155. 最小栈 辅助栈 716. 最大栈 辅助栈,最大栈出栈时候要把原栈里对应最大值找出来 232. 用栈实现队列 225. 用队列实现栈 622. 设计循环队列 数组实现循环队列 空:head==tail 满:(tail+1)...原创 2021-04-21 20:35:24 · 122 阅读 · 0 评论 -
C ++基础数据结构 | 优先对列、堆 (PriorityQueue、Heap)
C ++基础数据结构 | 优先对列、堆 (PriorityQueue、Heap)优先级队列priority_queue这是一个拥有权值queue,其内部元素按照元素的权值排列。权值较高者排在最前优先出队。其中缺省情况下系统是通过一个max-heap以堆实现完成排序特性,表现为一个以vector表现的完全二叉树。//升序队列 小顶堆 great 小到大priority_queue <int,vector<int>,greater<int> > pq;.原创 2021-04-20 20:51:26 · 144 阅读 · 0 评论 -
C ++基础数据结构 | 并查集(Disjoint Set Or Union-Find)
C ++基础数据结构算法 | 并查集(Disjoint Set Or Union-Find)只负责维护连通性 存在区间合并的题干,应当考虑使用并查集目录C ++基础数据结构算法 | 并查集(Disjoint Set Or Union-Find)并查集的基本概念并查集的基本结构并查集森林及基本操作实现并查集的两种优化按秩合并路径压缩并查集的基本概念并查集(Union Find),在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后原创 2021-04-20 17:34:27 · 178 阅读 · 0 评论 -
C++基础数据结构 | 数据结构入门篇
C++基础数据结构算法 | 数据结构入门篇原创 2021-04-19 13:04:52 · 212 阅读 · 0 评论 -
C++基础数据结构 | Trie树(字典树、前缀树)
C++基础数据结构算法 | Trie树(字典树、前缀树)Trie树的基本概念Trie树,即字典树,又称单词查找树、前缀树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。它有3个基本性质:根节点不包含字符,除根节点外每一.原创 2021-04-16 13:11:13 · 166 阅读 · 0 评论 -
C++基础算法 | 二分搜索(Binary Search)
C++基础数据结构算法 | 二分搜索(Binary Search)一般用第三个mid=start+(end-start)/2,最后结果是(start,end)这里需要判断,mid最后是什么,再判断start是什么,end是什么// 左右界限left, right;while (left <= right) { mid = left + (right - left) / 2; if (check(mid)) { // 如果满足条件,记录答案原创 2021-04-14 17:07:42 · 198 阅读 · 0 评论 -
C++基础算法 | 回溯算法(Back Tracking Method)&& 深度优先搜索(Depth First Search)
在中间不符合题意的解中提前结束,避免无谓的损耗,称为剪枝。而在一个分支中的修改可能会影响其他分支解,需要进行擦除修改,称为回溯。回溯法:组合问题,没有顺序切割问题子集问题排列问题,有顺序全排列棋盘问题#include <iostream>#include<vector>using namespace std;vector<vector<int>>result;vector<int...原创 2021-04-13 21:24:19 · 451 阅读 · 0 评论 -
C++基础算法 | 扫描线(Scan Line)
C++基础数据结构算法 | 扫描线(Scan Line)首先应将各区间按左端点升序排列,这道题已经给排好序了。 252. 会议室 区间排序,看头尾有没有冲突 253. 会议室 II 数飞机算法,开始+1,结束-1,排序,看count最大值 56. 合并区间 区间排序,一个一个放,如果下一个头大于上一个尾,直接放,如果下一个头小于等于上一个尾,上一个尾更新为max(上一个尾,下一个尾) 57. 插入区间 插入,合并.原创 2021-04-12 12:01:43 · 1683 阅读 · 0 评论 -
C++基础算法 | 广度优先搜索(Breadth First Search)
BFSvivo游戏中心的运营小伙伴最近接到一款新游戏的上架申请,为了保障用户体验,运营同学将按运营流程和规范对其做出分析评估。经过初步了解后分析得知,该游戏的地图可以用一个大小为 n*n 的矩阵表示,每个元素可以视为一个格子,根据游戏剧情设定其中某些格子是不可达的(比如建筑、高山、河流或者其它障碍物等),现在请你设计一种算法寻找从起点出发到达终点的最优抵达路径,以协助运营小伙伴评估该游戏的可玩性和上手难度。输入描述:第一行表示矩阵大小 n,5 <n < 10000第二行表示起点和原创 2021-04-09 23:54:41 · 325 阅读 · 0 评论 -
C++基础算法 | 单调栈(Monotonous Stack)
第一步和第三步一定有,第二步存结果,变形的话在于第一步原创 2021-04-09 10:49:33 · 322 阅读 · 0 评论 -
利用递归实现四则运算(逆波兰表示法)
逆波兰表示法:一种不需要括号的后缀表达法规则:1、中缀表达式转后缀表达式:9 + ( 3 - 1 ) * 3 + 10 * 2 》》》》》 9 3 1 - 3 * + 10 2 * +从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号优先级,是右括号或优先级不高于栈顶符号(乘除优先加减)则栈顶元素全部依次出栈并输出,并将当前符号进栈,一直到最终输出后缀表达式为止。2、后缀表达式计算结果:9 3 1 - 3 ...原创 2020-10-27 01:10:13 · 275 阅读 · 1 评论 -
C++高级算法 | 动态规划(Dynamic Programming)
C++高级数据结构算法 | 动态规划(Dynamic Programming)深人静写算法(二)- 动态规划九章算法视频-动态规划(真的讲得很好的视频)原创 2020-10-19 22:09:10 · 614 阅读 · 0 评论 -
排序算法 | 桶排序
wait!!!原创 2020-05-11 23:06:58 · 133 阅读 · 0 评论 -
排序算法 | 计数排序
wait!!!原创 2020-05-11 23:05:47 · 133 阅读 · 0 评论 -
排序算法 | 基数排序
基数排序(Radix Sort)基数排序(RadixSort)是桶排序的扩展,它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较。基数排序又称“桶子法”排序,它是根据待排序的每一位上的数字进行入“桶”排序,桶的数量跟当前单个数字的取值范围有关。当前数字是十进制,单个数字就是 0-9,桶的编号就是0 - 9基数排序是一种非比较排序算法。目录基数排序(Radix Sort)1、算法描述图例2、算法分析2.1、复杂度分析2.1.1、时间复杂度2.1.2、空原创 2020-05-09 14:59:49 · 185 阅读 · 0 评论 -
排序算法 | 归并排序
归并排序(Merge Sort)归并(Merge Sort)排序是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并排序是建立在归并操作上的一种有效的排序算法。该算法运用了递归和分治的两种重要思想,是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完...原创 2020-05-07 11:11:15 · 182 阅读 · 0 评论 -
排序算法 | 堆排序
堆排序可视化工具:https://www.cs.usfca.edu/~galles/visualization/HeapSort.html堆排序(Heap Sort)堆排序(HeapSort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点目录堆排序(H...原创 2020-05-06 15:15:24 · 154 阅读 · 0 评论 -
排序算法 | 直接选择排序
直接选择排序(Straight Selection Sort)选择排序的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放入已排序数列的最后,直到全部记录排序完毕。直接选择排序是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均...原创 2020-05-05 01:49:30 · 515 阅读 · 0 评论 -
排序算法 | 希尔排序及其误区明析
希尔排序 (Shell Sort)希尔排序(ShellSort)是插入排序的一种,又称“缩小增量排序”(Diminishing Increment Sort)。该方法因D.L.Shell于1959年提出而得名,这是第一个时间复杂度突破O(n^2)的排序算法,时间复杂度大概是O(n^1.3)。希尔排序是非稳定排序算法。希尔排序是直接插入排序的改进版本。该方法因D.L.Shell于1959年...原创 2020-05-04 19:41:58 · 202 阅读 · 0 评论 -
排序算法 | 直接插入排序及其优化
直接插入排序(Straight InsertionSort)插入排序是一种简单直观的排序算法。插入排序的基本思想是:将数组的第一个数认为是有序数组,从后往前(从前往后)扫描该有序数组,把数组中其余n-1个数,根据数值的大小,插入到有序数组中,直至数组中的所有数有序排列为止。这样的话,n个元素需要进行n-1趟排序。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到...原创 2020-05-04 09:48:27 · 396 阅读 · 0 评论 -
排序算法 | 冒泡排序及其优化
冒泡排序(Bubble Sort)属于一种典型的交换排序,通过相邻数据的比较交换来达到排序的目的。交换排序顾名思义就是通过相邻元素的两两比较,判断是否符合要求(如从大到小、首字母从A到Z),如过不符合就交换位置来达到排序的目的。冒泡排序名字的由来就是因为在交换过程中,类似水冒泡,小(大)的元素经过不断的交换由水底慢慢的浮到水的顶端。原创 2020-05-02 18:22:36 · 172 阅读 · 0 评论