![](https://img-blog.csdnimg.cn/bc0b5d43606f4084aef452e1cf649250.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode
LeetCode详细题解,包括《剑指Offer》等
说文科技
同名公众号【说文科技】,做有态度的研究。
展开
-
【LeetCode】162. 寻找峰值
本题是一道优秀的二分算法题目。优秀的地方在于,一改传统二分法的判断标准(以前后元素的值比较为标准)。同时为了将代码变得优雅,需要对代码进行一个trick处理。原创 2024-07-17 23:38:24 · 167 阅读 · 0 评论 -
【LeetCode】环形链表
怎么把一个问题有方法的分析,并抽象建模,是一个很重要的能力!原创 2022-04-19 17:32:26 · 237 阅读 · 1 评论 -
【LeetCode】125. 验证回文串
熟练使用python自带函数会大大降低编码复杂度。原创 2024-07-14 16:38:33 · 131 阅读 · 0 评论 -
【LeetCode】27. 移除元素
双指针经典例题?原创 2024-07-14 05:55:12 · 210 阅读 · 0 评论 -
【LeetCode】205. 同构字符串
认真地分类讨论,评判复杂度,再决定是否要写代码执行。整套流程干净利落,不存在主观臆想,也不会有对事实结果计算的巨大偏差。原创 2024-07-13 09:36:14 · 275 阅读 · 0 评论 -
【LeetCode】2187. 完成旅途的最少时间
本题想要找出一个达到 totalTrips 趟需要的最少时间成本t,那么对于题目来说任何大于t的数也会是解,但不是最优解;任何小于t的数都不是解。这样整个值域就被分成了两部分,区间[0,t) 和 [t, +∞)。二分法找出这个区间分界点,就是本题的最优解。原创 2024-07-13 07:03:01 · 262 阅读 · 0 评论 -
【LeetCode】1283.使结果不超过阈值的最小除数
典型的一道二分法题。在某种限制条件下取到最优值,且最优值满足单调性。原创 2024-07-12 08:22:39 · 156 阅读 · 0 评论 -
【LeetCode】2089. 找出数组排序后的目标下标
当有简单方法可以使用时,千万别绕远路了。原创 2024-07-11 23:38:18 · 187 阅读 · 0 评论 -
【LeetCode】633. 平方数之和
双指针典型题目。原创 2024-07-11 23:23:36 · 186 阅读 · 0 评论 -
【LeetCode】面试题 16.21. 交换和
质量还不错的一道题。这道题不难想,按照固定套路分析就能判断出使用二分法来解决。原创 2024-07-11 22:03:58 · 169 阅读 · 0 评论 -
【LeetCode】169. 多数元素
O(n)复杂度的解法挺难想到。本质思想类似于消消乐游戏,如果一个元素是数组中的众数,那么将众数跟剩余的各个数相消,剩下来的那个数就是众数。但问题是,如何做到相消的代码逻辑?需要仔细领悟。原创 2024-07-09 23:57:31 · 214 阅读 · 0 评论 -
【LeetCode】239. 滑动窗口最大值
这题其实挺不好写的。知识点虽然重要,但细节非常繁琐,我这一次(20240709)花费了大概2个小时才写出这道题,但其实这还是我已经知道这道题是需要使用“单调队列”算法来求解,并我已事先学过单调队列算法了。所以知易行难,提升算法水平,还是需要老老实实的多敲代码。原创 2024-07-09 08:17:45 · 145 阅读 · 0 评论 -
【LeetCode】12. 小张刷题计划
稳住,能赢!没有经验的同学在面试岗位的时候,总是显得手忙脚乱,所以多练习,把技能提升,眼界提升,接着心态放平和,不要慌张,把面试题目读懂读透彻就会大大提升赢的概率。其实本题就是一道二分法解决的题目,只不过这里的二分法多了一个限制条件。原创 2024-07-09 07:40:59 · 315 阅读 · 0 评论 -
【LeetCode】976. 三角形的最大周长
虽然是一道easy题,但是要是在没有见过&面试的情况下直接写出来还不是那么容易。幸运的是,我做到了。本题的难点在于需要先排序,然后分析出最大周长三角形的条件,这样就避免抓瞎。原创 2024-07-02 22:05:34 · 368 阅读 · 0 评论 -
【LeetCode】746. 使用最小花费爬楼梯
从这道简单的题来看,动态规划做的事儿就是:(1)设定一个状态,这个状态可以需要用一个数组来记录;(2)确定状态间的转移公式;得出正确解原创 2024-06-30 18:14:00 · 280 阅读 · 0 评论 -
【LeetCode】368. 最大整除子集
虽然这题挺难写的,但是仍然提醒了我:解题要注意方法。在明确分析当一条道路走不通的时候,就不要再犹豫了,就要果断的换方法,尝试用其它方法解决。否则一味的消耗时间,得不偿失。换方法的前提是明确的分析(一定要落到纸上,为什么得不出结果?是复杂度太高?还是难以实现?)后得出的结论是不可行。原创 2024-06-30 10:56:09 · 318 阅读 · 0 评论 -
【LeetCode】164. 最大间距
本题是肯定是需要使用排序方法才能得到答案,但有什么好的方法能在O(N)的时间要求里排好序呢?基数排序满足题目要求,其能在O(N)的时间复杂度和空间复杂度里对整数数组进行排序。原创 2024-06-29 23:15:40 · 304 阅读 · 1 评论 -
【LeetCode】53. 最大子数组和
刚开始拿到题目,没有什么想法。但是开始分析起来的时候,就立马有思路了。所以做题要敢于分析,敢于思考,敢于动脑。原创 2024-06-29 10:15:27 · 272 阅读 · 0 评论 -
【LeetCode】 49. 字母异位词分组
这道题的思路不是那么好想到。有两种解决方法:(1)暴力法;但是这种方法的复杂度还是挺高的。(2)映射法。因为是需要把由相同字母组成的单词放到一块儿,所以可以理解成相同字母的单词的key是相同的。那么怎么得到这个key呢?可以用数组记录。原创 2024-06-28 21:06:42 · 280 阅读 · 0 评论 -
【LeetCode 3】无重复字符的最长子串
思想就是双指针,left=right=0。从左到右遍历字符串,right递增,同时将遇到的字符放到set中。遍历的过程中,判断set中是否已经存在该字符了,如果存在,那么就递增left,直到遇到左指针与右指针所指位置的字符相等。相等时,将left加一。再递增right,这个过程中找到最大值即可。原创 2024-06-27 22:25:29 · 295 阅读 · 0 评论 -
【LeetCode 392】判断子序列
这其实就是用了两个下标,累计的判断字符串s的字符是否出现在了字符串t中,如果出现了,那么就把字符串s的下标往后移。字符串t的下标始终后移。原创 2024-06-27 21:35:56 · 322 阅读 · 0 评论 -
【LeetCode 274】H指数
熟练运用list的函数,list.sort(reverse=True)表示按照倒序的方式排序。原创 2024-06-26 21:23:18 · 384 阅读 · 0 评论 -
【LeetCode 5.】 最长回文子串
一道题能否使用动态规划可以从判断最优结构是否是通过最优子结构推导得到?如果具备这个特性,那么就应该朝动态规划思考。本题令dp[i][j]表示串s[i:j+1]是否是回文子串,那么判断`dp[i][j]` 是否是回文子串,相当于判断s[i] 与 s[j] 是否相当 + dp[i+1][j-1] 是否相等。原创 2024-06-15 22:12:38 · 458 阅读 · 0 评论 -
【LeetCode 383】 赎金信
学会利用Python内部工具。原创 2024-06-15 08:54:59 · 195 阅读 · 0 评论 -
【中级算法】跳跃游戏
不可否认,这是一道简单题。从左到右迭代,依次判断各个位置上的数所能到达的最远距离,同时判断最远距离与当前位置、目标位置的关系,如果满足条件,继续迭代,如果不满足条件,终止迭代。原创 2022-03-22 23:20:51 · 3062 阅读 · 0 评论 -
【LeetCode 92.】 反转链表 II
尽可能抽象问题,然后简化代码。同时需要注意,while循环里面的条件值要切记不能随着while循环而变化了!写代码要时刻小心!原创 2024-06-14 21:57:41 · 256 阅读 · 0 评论 -
【LeetCode 12】整数转罗马数字
如果这题按照正向的求解则非常麻烦。例如对于3749这个数字,你需要判断是千分位,还是百分位,还是十分位,还是个位?然后再判断数字大小进行组合,这么一通操作下来非常繁琐。但如果采取逆向思维解题,即按照从大到小的顺序将所有的组成成分排序,这样就能直接映射出答案了。这题背后有贪心的味道。原创 2024-06-14 00:04:31 · 327 阅读 · 0 评论 -
【LeetCode 128】 最长连续子序列
判断前一位数(i-1)在不在字典中是这道题的关键之处,这样做之后可以避免重复查找,从而达到O(n) 的时间复杂度。如果没有这个判断,那么时间复杂度最坏就是O(N^2)级别了。原创 2024-06-12 22:07:55 · 354 阅读 · 0 评论 -
【LeetCode 74】搜索二维矩阵
题目比较简单,就是使用二分法即可解决。原创 2024-06-07 00:49:58 · 255 阅读 · 0 评论 -
【LeetCode 35】搜索插入位置
经典的二分搜索题,没有特别之处。可以用于考察同学对二分法的理解是否到位。这道题的关键点在于:找到满足第一个大于等于target条件的数的下标即可,而这个下标就是left。所以最后返回值就是left。原创 2024-06-06 22:42:48 · 287 阅读 · 0 评论 -
【LeetCode 1】两数之和
虽然这是一道简单题,但是给了我非常多的启迪。深搜与多重for循环没有本质区别,只不过深搜是把多行代码放到一个函数里递归调用了。但其实本题更好的方法是利用空间提升速度。告诫我们写算法题绝不是为了炫技,而是为了优雅地解决问题。原创 2024-06-02 10:29:23 · 364 阅读 · 0 评论 -
【LeetCode 101】对称二叉树
自己动脑思考的时候未能考虑全面,以为就是简单的递归题,哪知道越做越复杂了。所以在下笔之前一定要充分考虑清楚,避免出现这种手忙脚乱的情况。这道题虽然是简单题,但是质量确实不错,是一道很好的面试题。原创 2024-06-01 16:19:41 · 300 阅读 · 0 评论 -
【LeetCode 637】二叉树的层平均值
简单题,遇到问题要快速排查,迅速定位是哪里出了问题,总之,不要怀疑编译器。原创 2024-06-01 15:01:38 · 203 阅读 · 0 评论 -
【LeetCode】100. 相同的树
第一层次是把题目写出来;第二层是根据写的代码逻辑捋顺一下,看哪里还可以优化?深度优先遍历搜索(其实就是写递归代码)时需要牢记:什么条件下递归?什么情况下返回?想好边界后,就比较容易写代码了。计算机编程一定要是先思考,再行动。原创 2023-05-18 14:21:28 · 230 阅读 · 0 评论 -
【LeetCode 63】 不同路径 II
简单的DP题,没有什么特别需要注意的地方。原创 2024-06-01 10:25:39 · 321 阅读 · 0 评论 -
【Leetcode 17】电话号码的字母组合
这有点儿像局部的全排列。因为最后的输出需要遵循电话号码的输入顺序,所以递归的时候就得按照顺序递归。还有一点需要注意的是:递归传递的参数形式是变量+变量传递,而不是先修改变量再传递,否则就把值给修改了,导致后面就错误了。原创 2022-03-21 20:24:41 · 172 阅读 · 0 评论 -
【LeetCode 77. 组合】
总结了一下,深搜处理的代码,关于返回值有三大类。第一类:层层传递,将最深层的结果传上来;第二类:每层都返回值,迭代更新;第三类:使用全局变量,将结果写到变量中保存。本题的深搜代码则需要配合第三类来解决。原创 2024-05-31 00:20:23 · 275 阅读 · 1 评论 -
【LeetCode 130. 被围绕的区域】
这题其实非常不错。如果正向解,非常麻烦;因为很难界定哪些O是被包围的?但是如果反向解呢?因为边界的O不会被包围,那么就可以想到跟边界O相连的O都不会被包围。那么除此之外的O都会被包围,题目就解决了。原创 2024-05-30 23:09:27 · 309 阅读 · 0 评论 -
【LeetCode 167】两数之和II
简单的双指针的题,使用头尾指针分别指向数组的首尾,然后依次判断两者值的和与target的大小关系。原创 2024-05-26 22:14:05 · 293 阅读 · 0 评论 -
【LeetCode 151】反转字符串中的单词
使用Python中的内置函数会极大地提升解题速度。强烈建议求职的同学要对某一个语言的内置函数做到十分熟悉!原创 2024-05-26 22:00:24 · 332 阅读 · 0 评论