
LeetCode题解
文章平均质量分 89
?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 评论 -
【哈希表】关于哈希表,你该了解这些!
总结一下,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。如果在做面试题目的时候遇到需要判断一个元素是否出现过的场景也应该第一时间想到哈希法。原创 2023-01-25 12:16:40 · 2585 阅读 · 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 评论 -
【链表】leetcode707.设计链表(C/C++/Java/Js)
可以说这五个接口,已经覆盖了链表的常见操作,是练习链表操作非常好的一道题目链表操作的两种方式:直接使用原来的链表来进行操作。设置一个虚拟头结点在进行操作。当然要使用虚拟头结点来做会更加方便啦~原创 2023-01-06 15:27:56 · 906 阅读 · 0 评论 -
【链表】leetcode203.移除链表元素(C/C++/Java/Js)
真正理解到单链表的结构和删除操作后,本题是非常基础和简单的。直接使用原来的链表来进行删除操作。设置一个虚拟头结点在进行删除操作。在笔试中有的题可能会告诉你链表包含一个头结点,头结点不存放数据,这个时候也是方式二的处理思路。而本题,没有头结点,我们就创造头结点。正所谓没有路我们就创造路。原创 2023-01-06 13:22:23 · 1028 阅读 · 0 评论 -
【链表】关于链表,你该了解这些!
链表的定义,存储方式,类型,操作。原创 2023-01-05 22:58:34 · 990 阅读 · 0 评论 -
【数组经典题目】总结篇
数组中经典题目方法:二分法;双指针法;滑动窗口;模拟行为;原创 2023-01-05 22:35:44 · 785 阅读 · 0 评论 -
【数组】leetcode59.螺旋矩阵II(C/C++/Java/Js)
坚持循环不变量原则。代码里给出的处理原则都是统一的左闭右开。:定义每循环一个圈的起始位置;:指定每个圈循环几次;例如n为奇数3,那么loop = 1 只是循环一圈,矩阵中间的值需要单独处理:矩阵中间的位置,例如:n为3, 中间的位置就是(1,1),n为5,中间位置为(2, 2)count = 1: 用来给矩阵中每一个空赋值offset = 1:需要控制每一条边遍历的长度,每次循环右边界收缩一位,可以在for中看到。还有别忘记如果n为奇数时,对最中心的位置赋值。原创 2023-01-05 22:14:49 · 608 阅读 · 0 评论 -
【数组】leetcode209.长度最小的子数组(C/C++/Java/Js)
这道题做完对滑动窗口有了更加深入的理解。key!!!就是如何从两个for遍历转换为一个for遍历,而一个for循环中,循环变量应该是滑动窗口的起始位置还是终止位置呢?这些问题想清楚本题也就很好解决了。904.水果成篮76.最小覆盖子串因为初试的时候可以说把数据结构和算法中的代码都牢牢的啃了一遍,在思考的过程中会很自然的就联想到一些经典排序算法的思想,例如归并排序,快排等等。这种感觉挺好的,基础很重要。一点一点由易到难吧。你的努力不会白费。你思考过的每一步,都会为你今后的思想堡垒添砖加瓦。原创 2023-01-03 15:47:48 · 402 阅读 · 0 评论 -
【数组】leetcode977.有序数组的平方(C/C++/Java/Js)
双指针法;归并思想;有序数组的平方;力扣题解;原创 2023-01-03 14:53:54 · 499 阅读 · 0 评论 -
【数组】leetcode27.移除元素(C/C++/Java/Js)
快慢指针;双指针;原地数组操作;交换或者覆盖;原创 2022-12-30 21:37:57 · 650 阅读 · 0 评论 -
【数组】leetcode704.二分查找(C/C++/Java/Js)
leetcode题解;二分法;原创 2022-12-30 19:44:07 · 546 阅读 · 0 评论