![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 52
kinglinch
仓鼠宝宝一枚
展开
-
窗口问题[1]-最小栈
窗口问题[1]-最小栈 实现一个最小栈,这个栈有一个getMin方法,能在O(1)的时间复杂度内返回栈中最小的元素代码及实现思路如下?public class MinStack { /** * 思路 * * 使用两个栈 * * 一个栈存放的是正常的压栈元素 * 另一个压的是包括当前元素在内栈中最小的位置 * * 如果 压入的元素大于最小栈的栈顶 * 说明这个元素大,则将最小栈栈顶元素再次压入原创 2022-03-20 14:33:28 · 222 阅读 · 0 评论 -
复杂算法介绍[3]-Manacher算法
复杂算法介绍[3]-Manacher算法 Manacher算法,江湖人称马拉车算法,用来解决最长会问串问题,举个例子:假设字符串是 fabccba 最长回文串就是abccba 如何快速求出这个最长的回文串1、暴力尝试 寻找以每个字符为中心的最长回文子串,但是回文子串有奇数和偶数的区分,例如回文串abccba的中轴线是在两个c中间,并不是独立的字符,为了统一奇数偶数的情况,需要对字符串进行补长变成:#f#a#b#c#c#b#a#,也就是每个字符串前面都补了一个#,字符串最后也补一个原创 2022-02-28 20:07:27 · 174 阅读 · 0 评论 -
复杂算法介绍[2]-KMP算法代码实现
复杂算法介绍[2]-KMP算法代码实现 直接上代码:public class Kmp { /** * 算是比较难的算法之1,看了很多遍,经常忘记 * * 1、给定一个字符串,求某个位置字符之前字符串最长前缀和后缀匹配长度 * abcabck * * 在k位置,就是从长度是1开始遍历 * l = 1,前缀是a,后缀是c * l = 2,前缀是ab,后缀是bc *原创 2022-02-17 22:26:05 · 241 阅读 · 0 评论 -
复杂算法介绍[1]-KMP算法
复杂算法介绍[1]-KMP算法 KMP算法解决的问题就是字符串模式匹配问题,假设有两个字符串,一个是text,一个是pat,要寻找pat在text中第一次出现的位置,怎么做?1、朴素的思想 首先想到的肯定是暴力搜索,从text的第一个字符开始截取每一个和pat相同长度的子串进行匹配,如下图: 循环比较过程中,如果截取的子串中的任意一个字符和pat对应位置不等,则可以直接跳过该子串和pat剩余位置的比较 上面的解法是暴力解,时间复杂度O(MN),M和N分别是text和pat的长度,更优的原创 2022-02-17 22:25:32 · 605 阅读 · 0 评论 -
经典排序算法[3]-归并排序
经典排序算法[3]-归并排序 将归并排序之前,先解决一个问题,如何合并两个有序数组?arr1 = [1,3,4,6]arr2 = [2,3,7,9,10] 基本思路如下:维护两个索引index1和index2分别代表arr1和arr2的某个位置的元素,初始值都是0,构造一个长度为两个数组长度之和的结果数组res[],res待写位置i初始为0,算法伪代码流程:如果 arr1[index1]<=arr2[index2] 则 拷贝arr1[index1]的元素到结构数组的res原创 2022-02-04 10:33:29 · 920 阅读 · 0 评论 -
经典排序算法[2]-堆排
堆结构与堆排序详解原创 2022-02-02 14:11:45 · 182 阅读 · 0 评论 -
经典排序算法[1]-快排
一文详解快排思想原创 2022-02-01 15:00:11 · 411 阅读 · 0 评论