算法
文章平均质量分 85
非英杰不图
敌军势大与否,无碍我自计定施。
展开
-
字符串匹配算法之Leetcode习题讲解
字符串匹配算法之Leetcode习题讲解。Leetcode 459: 重复的字字符串,采用KMP算法;Leetcode 1392: 最长快乐前缀,同样用KMP算法;Leetcode214 最短回文串,采用KMP算法的变体;Leetcode 5: 最长回文子串,采用马拉车算法;Leetcode 28: 找出字符串中第一个匹配的下标,采用Sunday算法;Leetcode 3: 无重复字符的最长子串,采用二分搜索;Leetcode 14:最长公共前缀,采用暴力匹配算法;Leetcode 12和面试题01.05:原创 2023-01-01 17:31:12 · 906 阅读 · 2 评论 -
字符串经典匹配算法之shift_and算法
字符串经典匹配算法之shift_and算法。shift_and算法的总体思路是把模式串预处理成一种特殊编码形式,然后根据这种编码形式去逐位匹配文本串。shift_and算法的时间复杂度为O(n),可以用于处理流式数据,同时可以用于处理复杂的正则表达式,比如模式串的每一位可能是多个字符。因为shift_and算法的预处理兼容性非常强。原创 2022-12-11 20:23:53 · 521 阅读 · 0 评论 -
字符串经典匹配算法之KMP算法
本文介绍了字符串经典匹配算法中的KMP算法。理论介绍中首先分析了可以将模式串的逐位比较改为跳位比较,从而引出只要计算好每一个位置的最长公共前后缀,那么就可以进行跳位比较,而且跳几位可以预先计算出来。然后分析了如何计算模式串的最长公共前后缀位置,采用了递推的思想。接下来进行了代码演示,在代码中进行了详细的注释。最后介绍了理论价值,KMP算法相当于状态机,可以处理流式数据,不需要存储文本串的全部内容。原创 2022-11-27 19:38:02 · 543 阅读 · 1 评论 -
字符串经典匹配算法之暴力匹配算法
字符串匹配问题:在一个字符串中查找某个词是否出现过。母串S:要从哪个字符串中查找, 也叫文本串。模式串T:要查找那个词(子字符串)。单模匹配问题:只需查找一个模式串T。匹配方法:用模式串去匹配母串的每一位。例如模式串T的长度为L,那么可以从母串的第一位开始,看往后看的L长的字符串和模式串是否相等,若相等则找到了,若不相等则再从第二位开始往后匹配。意义:虽然该算法没有什么技巧,但是可以不重不漏地进行字符串匹配查找。字符串匹配过程中最重要的也就是不重、不漏。原创 2022-11-27 16:32:39 · 591 阅读 · 0 评论 -
Leetcode刷题之二叉搜索树、平衡二叉搜索树3
主要介绍了Leetcode中二叉搜索树和平衡二叉搜索树相关的几道题目。第一题为面试题17.12: BiNode, 即将二叉搜索树转化为单向链表,这里用了中序遍历的方法,遍历过成中只维护当前节点和遍历的前一个节点。第二题为剑指Offer33:二叉搜索树的后续遍历序列,将后续序列看成一个二叉搜索树,采用中序遍历的方法进行遍历,看遍历的过程中是否保持递增状态。第三题为Leetcode 1008: 前序遍历构造二叉搜索树,采用了递归遍历的方法,分别构造出做左子树和右子树,然后和根节点合并。第四题为面试题04.09原创 2022-11-13 12:23:30 · 61 阅读 · 0 评论 -
Leetcode刷题之二叉搜索树、平衡二叉搜索树2
本文通过讲解几道Leetcode例题,复习和回顾了二叉搜索树、平衡二叉搜索树的知识。首先回顾了二叉搜索树和平衡二叉搜索树的基本概念、插入和删除相关操作,然后讲了三道例题。第一题为Leetcode 108 将有序数组转化为二叉搜索树。第二题为Leetcode 98, 验证二叉搜索树, 第三题为Leetcode 501 二叉搜索树中的众数。三道题都是将二叉搜索树看做有序序列,属于结构化思维。原创 2022-11-12 21:09:03 · 145 阅读 · 0 评论 -
Leetcode刷题之二叉排序树、平衡二叉搜索树1
Leetcode刷题笔记,主要为二叉排序树(二叉搜索树), 平衡二叉搜索树(AVL树)。首先回顾二叉搜索树和平衡二叉搜索树的基本概念然后举了三个例题。第一题为面试题04.06: 后继者,在中序遍历二叉搜索树的过程中记录上一个遍历到的节点,当期等于所求节点时,当前节点即为答案。第二题为Leetcode 450: 删除二叉搜索树中的节点,本题可以直接复用之前讲解二叉搜索树时的基本知识中的。第三题为Leetode1382: 将二叉搜索树变平衡,将其看做顺序结构,然后根节点取中间的那个节点,左右子树递归构建。原创 2022-11-06 16:43:18 · 613 阅读 · 0 评论 -
AVL树基础知识与代码实现
主要介绍一种特殊的二叉排序树--AVL树。主要介绍AVL树的来源,概念,介绍其中经常用到的左旋操作和右旋操作,二叉排序树-AVL树的失衡类型,二叉排序树-AVL树中各种失衡类型的调整方法,涉及所有调整方法的证明。最后用c++语言实现了AVL树的插入和删除操作。引入虚拟空节点,使得AVL树的调整过程极为简洁和优美。原创 2022-10-30 20:36:30 · 143 阅读 · 0 评论 -
二叉排序树基础知识与代码实现
主要介绍普通二叉排序树(二叉搜索树)的基础知识与代码实现。其中包括二叉排序树(二叉搜索树)的基本概念介绍,二叉排序树(二叉搜索树)的插入操作,二叉排序树(二叉搜索树)的删除操作。删除操作中又分为删除度为0的节点,删除度为1的节点,删除度为2的节点。将删除度为2的节点转化为寻找其前驱或后继,然后删除前驱或后继节点。最后用代码完整地实现了二叉排序树(二叉搜索树)的插入与删除操作。原创 2022-10-29 21:38:23 · 342 阅读 · 0 评论 -
Leetcode 刷题: 面试专项1
力扣1367: 二叉树中的链表; 力扣958: 二叉树的完全性检验;剑指Offer 36: 二叉搜索树与双向链表; 力扣464: 我能赢吗;力扣172: 阶乘后的零;力扣384: 打乱数组;力扣473: 路径总和;力扣395: 至少有k个重复子串的最长子串;力扣190: 颠倒二进制位;力扣8: 字符串转换整数(atoi) ;力扣380: O(1)时间插入、删除、获取随机;力扣402 : 移掉K位数字;力扣1081: 不同字符的最小序列;力扣1499: 满足不等式的最大值;力扣321: 拼接最大数原创 2022-10-23 21:40:53 · 192 阅读 · 0 评论 -
单调栈及经典问题
单调栈的基本概念、代码演示、典型例题。原创 2022-09-25 19:08:13 · 354 阅读 · 0 评论 -
Leetcode刷题笔记: 二分、搜索、动规复习
比如初始只有一个袋子,袋子数量为9,最大次数为1,当最大球最小的数量x分别为【1, 2, 3, 4, 5, 6, 7, 8, 9】时(注意最大最小球的数值范围只能是[1, nums.max()]), 可以消耗的次数ops分别为【8, 4, 2, 2, 1, 1, 1, 1, 0】, 当ops=1时, x 最小为5, 此即答案。题目解析:对于某一个学生,向左看有x1个连续递减的学生,向右看有x2个连续递减的学生,则该同学应该被分到的糖果数量为max(x1, x2).总结:深搜回溯上下为反逻辑;原创 2022-09-18 13:17:49 · 121 阅读 · 0 评论 -
单调队列及经典问题
数据结构:定义一种性质并且维护这种性质。数据结构-队列:存储、获取、删除数据的一种结构。这种结构中,保证先存储的数据被先获取/删除,后存储的数据被后获取/删除。像排队一样,先进先出。单调队列:队列中的数据始终保持从队首到队列单调递增或单调递减的性质。解决什么问题:单调队列解决滑动窗口的最值问题;一些实际问题可以转化为滑动窗口的最值问题。原创 2022-09-03 23:38:08 · 447 阅读 · 0 评论 -
算法与基础数据结构Leetcode部分题目解析
走出上述循环判断后,name + “(” + count + ")在哈希表中必不存在,将其加到结果数组中,同时更新哈希表key为name 的值和key为name + “(” + count + ")的值。用广搜时,对其下属依次入队,每次出队时计算重要性。针对这种情况,可以在遍历数组时首先做一个前处理,比较数组最左边和最右边的元素,若二者相等,则不断移动最左边的位置,直到二者不相等。解题思路:可以用一个集合存储糖果类型,当集合的数量不小于n/2时,最多能吃到n/2个糖果类型,否则只能吃到集合数量的糖果类型。原创 2022-08-21 22:02:08 · 227 阅读 · 0 评论 -
深度搜索、广度搜索及经典例题(下)
搜索从初始状态,通过某种转化到中间状态,最终转化到终极状态的过程。深度搜索先不断从某一方向进行状态转化,直到无法转化,最后再回溯地向其他方向转化搜索。广度搜索先找到转化一步能遍历到哪些状态,然后找到转化两部能到达的状态,直到找到最终的状态。深搜和广搜的本质穷举遍历。深搜一般用递归实现适合解决连通性的问题,广搜一般用队列实现,适合解决求距离的问题。............原创 2022-07-24 12:03:57 · 1670 阅读 · 0 评论 -
深度搜索、广度搜索及经典例题(上)
搜索从初始状态,通过某种转化到中间状态,最终转化到终极状态的过程。深度搜索先不断从某一方向进行状态转化,直到无法转化,最后再回溯地向其他方向转化搜索。广度搜索先找到转化一步能遍历到哪些状态,然后找到转化两部能到达的状态,直到找到最终的状态。深搜和广搜的本质穷举遍历。深搜一般用递归实现,广搜一般用队列实现。...............原创 2022-07-17 23:59:15 · 798 阅读 · 0 评论