
算法练习
文章平均质量分 90
收录算法练习题
?Suki
你终究会成为你正在成为的人,你的每一个选择都是来自你人生意义的诘问。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【字符串】leet459.重复的子字符串(C/C++/Java/Python/Js)
一个字 妙。帮你把KMP算法学个通透!(理论篇)帮你把KMP算法学个通透!(求next数组代码篇)字符串这么玩,可有点难度!| LeetCode:459.重复的子字符串。原创 2023-03-02 23:12:58 · 443 阅读 · 0 评论 -
【字符串】leetcode28. 实现 strStr()(C/C++/Java/Python/Js)
为什么叫做KMP呢。因为是由这三位学者发明的:Knuth,Morris和Pratt,所以取了三位学者名字的首字母。所以叫做KMP。next数组就是一个前缀表(prefix table)。前缀表有什么作用呢?前缀表是用来回退的,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配。为了清楚地了解前缀表的来历,我们来举一个例子:要在文本串:aabaabaafa 中查找是否出现过一个模式串:aabaaf。请记住文本串和模式串的作用。动画演示。原创 2023-03-02 22:02:14 · 1218 阅读 · 0 评论 -
【字符串】剑指Offer58-II.左旋转字符串(C/C++/Java/Python/Js)
这个思路类似的题我在王道数据结构和算法的练习题也刷到过。只要思路打开了就很简单。也可以先反转整个字符串,再反转后n个子串和剩下前面的字串。一些同学热衷于使用substr,来做这道题。其实使用substr 和 反转 时间复杂度是一样的,都是O(n),但是使用substr申请了额外空间,所以空间复杂度是O(n),而反转方法的空间复杂度是O(1)。如果想让这套题目有意义,就不要申请额外空间。原创 2023-02-05 16:49:35 · 506 阅读 · 0 评论 -
【字符串】leetcode151.翻转字符串里的单词(C/C++/Java/Python/Js)
移除空格的思路与【数组】leetcode27.移除元素(C/C++/Java/Js)逻辑一样。实现反转字符串的功能,支持反转字符串子区间参照【字符串】leetcode344.反转字符串(C/C++/Java/Python/Js)和【字符串】leetcode541. 反转字符串II(C/C++/Java/Python/Js)。字符串复杂操作拿捏了!| LeetCode:151.翻转字符串里的单词。原创 2023-02-05 16:25:15 · 1251 阅读 · 0 评论 -
【字符串】剑指Offer 05.替换空格(C/C++/Java/Python/Js)
很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。原创 2023-02-03 19:34:41 · 411 阅读 · 0 评论 -
【字符串】leetcode541. 反转字符串II(C/C++/Java/Python/Js)
这道题目其实也是模拟,实现题目中规定的反转规则就可以了。字符串操作进阶!| LeetCode:541. 反转字符串II。原创 2023-02-02 19:39:26 · 455 阅读 · 0 评论 -
【字符串】leetcode344.反转字符串(C/C++/Java/Python/Js)
swap可以有两种实现。字符串基础操作!| LeetCode:344.反转字符串。原创 2023-02-02 18:13:41 · 421 阅读 · 0 评论 -
【哈希表】总结篇
虽然map万能,但还是应该学会区分什么时候用数组,什么时候用set。这里对链表部分的的总结来自Carl老师的《代码随想录》,强推!原创 2023-02-02 17:47:29 · 293 阅读 · 0 评论 -
【哈希表】leetcode18. 四数之和(C/C++/Java/Python/Js)
四数之和,和15.三数之和是一个思路,都是使用双指针法, 基本解法就是在15.三数之和的基础上再套一层for循环。原创 2023-02-01 19:50:50 · 537 阅读 · 0 评论 -
【哈希表】leetcode15. 三数之和(C/C++/Java/Python/Js)--梦破碎的地方
双指针法,妙哉!梦破碎的地方!| LeetCode:15.三数之和思路整理于Carl老师的《代码随想录》这道题细节也很多,对于去重逻辑的思考十分重要。原创 2023-02-01 18:30:41 · 830 阅读 · 0 评论 -
【哈希表】leetcode383. 赎金信(C/C++/Java/Python/Js)
这道题目是求 字符串a能否组成字符串b,而不用管字符串b 能不能组成字符串a。因为题目所只有小写字母,那可以采用空间换取时间的哈希策略, 用一个长度为26的数组还记录magazine里字母出现的次数。然后再用ransomNote去验证这个数组是否包含了ransomNote所需要的所有字母。依然是数组在哈希法中的应用。原创 2023-02-01 16:25:46 · 475 阅读 · 0 评论 -
【哈希表】leetcode454.四数相加II(C/C++/Java/Python/Js)
时间复杂度:O(n2我们使用了两次二重循环,时间复杂度均为 O(n2在循环中对哈希映射进行的修改以及查询操作的期望时间复杂度均为 O(1),因此总时间复杂度为 O(n2空间复杂度:O(n2),即为哈希映射需要使用的空间。在最坏的情况下,A[i]+B[j]A[i]+B[j] 的值均不相同,因此值的个数为 n2,也就需要 O(n2) 的空间。看到形如:A+B…+N=0的式子,要转换为(A+…T)=-((T+1)…+N)再计算,这个T的分割点一般是一半,特殊情况下需要自行判断。定T是解题的关键。原创 2023-01-31 20:11:28 · 867 阅读 · 0 评论 -
【哈希表】leetcode1. 两数之和(C/C++/Java/Python/Js)
为什么会想到用哈希表。哈希表为什么用map。本题map是用来存什么的。map中的key和value用来存什么的。原创 2023-01-31 19:20:02 · 771 阅读 · 0 评论 -
【哈希表】leetcode202. 快乐数(C/C++/Java/Python/Js)
判断一个元素是否出现集合里的时候,考虑哈希法。判断元素是否重复出现考虑set;判断循环可以使用快慢指针;原创 2023-01-29 20:32:11 · 684 阅读 · 0 评论 -
【哈希表】leetcode349. 两个数组的交集(C/C++/Java/Python/Js)
题目如果没有限制数值的大小,就无法使用数组来做哈希表了。而且如果哈希值比较少、特别分散、跨度非常大,使用数组就造成空间的极大浪费。此时就要使用另一种结构体了,set。主要要学会使用一种哈希数据结构:unordered_set,这个数据结构可以解决很多类似的问题。原创 2023-01-29 19:49:18 · 838 阅读 · 0 评论 -
【哈希表】leetcode242.有效的字母异位词(C/C++/Java/Python/Js)
数组其实就是一个简单哈希表,而且这道题目中字符串只有小写字符,那么就可以定义一个数组,来记录字符串s里字符出现的次数。原创 2023-01-27 15:55:28 · 735 阅读 · 0 评论 -
【链表经典题目】总结篇
考察链表的操作其实就是考察指针的操作,是面试中的常见类型。这里对链表部分的的总结来自Carl老师的《代码随想录》,强推!代码随想录。原创 2023-01-15 23:59:09 · 500 阅读 · 0 评论 -
【链表】leetcode142.环形链表II(C/C++/Java/Js)
判断链表是否环如果有环,如何找到这个环的入口自己动手推算一遍公式便很好理解啦~Carl老师的视频讲解思路整理也是摘录Carl老师的代码随想录。原创 2023-01-15 23:38:37 · 729 阅读 · 0 评论 -
【链表】leetcode面试题 02.07. 链表相交(C/C++/Java/Js)
链表相交。两个思路都很重要,尤其是思路二,自己画图理解一下。原创 2023-01-12 21:58:02 · 360 阅读 · 0 评论 -
【链表】leetcode19.删除链表的倒数第N个节点(C/C++/Java/Js)
双指针的经典应用,如果要删除倒数第n个节点,让fast移动n步,然后让fast和slow同时移动,直到fast指向链表末尾。删掉slow所指向的节点就可以了。这类的题,做会一道之后要学会类比运用,真正掌握这个思想。原创 2023-01-12 20:54:56 · 464 阅读 · 0 评论 -
【链表】leetcode24. 两两交换链表中的节点(C/C++/Java/Js)
本题迭代法本质就是模拟过程,还是基于对链表本身结构的了解,结合画图便不是难点。然后你会发现当你熟悉递归的写法后,会更爽!可以把递归操作想象成超级操作,相信他一定能完成任务。只要确定好终止条件,具体递归的细节不用深究,(当然,可以简单模拟),写熟练后就不需要了。养成递归思维是很有必要的,建议大家可以多看Carl老师写递归代码,递归三部曲,领悟透了会非常舒服。关于链表,你该了解这些!原创 2023-01-09 18:17:34 · 450 阅读 · 0 评论 -
【链表】leetcode206.反转链表(C/C++/Java/Js)
当时备考数据结构和算法的时候,这类题经常会出现。重点是理解理解什么呢?理解链表的结构,缺什么设什么。双指针法比较直接也比较好理解。递归稍有困难,但如果理解过程了也是很容易实现的。如果有困难可以去看帮你拿下反转链表有助于对本题更好的理解。我在看一些自命题学校的往年真题中,有的题目会要求你用递归/迭代的方式完成,所以我认为两种方式最好都掌握。对后面二叉树章节的学习也有帮助,因为二叉树题目当中几乎都是递归,真正理解到了递归的奥妙的时候,你会发现做题非常爽!原创 2023-01-09 17:46:32 · 529 阅读 · 0 评论 -
HJ2 计算某字符出现次数
C++ STL算法;get,getline等区别总结等。原创 2023-01-09 16:59:01 · 687 阅读 · 1 评论