
数据结构与算法
文章平均质量分 58
分享笔记,仅此而已
JungleCoding
学海无涯苦作舟
展开
-
KMP算法
1、什么是 KMP 算法,先说一下 KMP 这个名字是怎么来的,为什么叫 KMP 呢?因为是由这三位学者发明的:Knuth,Morris 和 Pratt,所以取了三位学者名字的首字母。所以叫做 KMP。2、KMP 有什么用处?KMP 主要应用在字符串匹配上。KMP 的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配。举一个例子:文本串 s:a a b a a b a a f a模式串 t:a a b a a f。原创 2024-07-16 15:08:21 · 623 阅读 · 1 评论 -
【力扣】203、环形链表 II
这个式子表示什么呢?让 fast 指针的移动速度是 slow 指针的两倍即可,当它们再次相遇时,说明 fast 指针比 slow 指针多走了一圈,并重新追上 slow 指针了,此时可以说明链表存在环。如何判断是否存在环呢?这个比较容易想到,使用快慢指针即可判断链表是否存在环。如何确定环的入口点呢?让我们假设三个变量 x,y,z。原创 2024-05-03 03:17:40 · 499 阅读 · 0 评论 -
【力扣】螺旋矩阵
那其实我们要做的就是将矩阵中的每一个单元格的内容填充进这个二维数组中,至于填充的过程是怎样的,就需要我们去找出规律,然后用代码去模拟这个旋转过程了,可见这是一道过程模拟的编程题。刚开始遇到这道题目的时候相信没见过的同学多多少少都会有点懵圈,感觉题目有点无从下手,但其实只要抓住本质就行了,题目的最终目的就是返回一个二维数组的结果,这个二维数组的大小是的。这里一圈下来,我们要画每四条边,这四条边怎么画,每画一条边都要坚持一致的左闭右开,或者左开右闭的原则,这样这一圈才能按照统一的规则画下来。原创 2024-04-24 23:04:56 · 349 阅读 · 0 评论 -
【力扣】977. 有序数组的平方
但是注意,题目要求时间复杂度为 O(n),这样就打消了调用 Java 库内置的排序方法的念头了。一般我们看到这种对时间复杂度有要求的题目,通常第一考虑的是用空间换时间,即用额外的存储来使得程序执行时间更短。但其实这是题目给我们的诱导,题目给的例子只是恰好是一个先递减再递增的数组,且平方后的最小值正好在数组中间,因此这种方法要解题是比较费劲的,且编写出来的代码也不够优化。这时候可以考虑从两端向中间靠拢。我相信大部分同学肯定能想到用双指针解题,但需要注意双指针指向的位置,可能部分同学会考虑从中间向外展开。原创 2024-04-21 22:56:57 · 426 阅读 · 0 评论 -
【力扣】最简单的二分查找
举一个例子:数组 nums = [-1, 0, 3, 5, 11, 12, 13];因此,可以很快确定使用二分法。这取决于我们 left 指针和 right 指针的区间范围。原创 2024-04-16 23:25:03 · 190 阅读 · 0 评论