![](https://img-blog.csdnimg.cn/20200319173927312.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
OJ题解
各个oj题目零散汇总。
EOJ,POJ, HDOJ,等等
说文科技
同名公众号【说文科技】,做有态度的研究。
展开
-
【LeetCode】452.用最少数量的箭引发气球
能够找到问题的解法与把问题足够简化是天壤之别。比如我知道这题可以用贪心算法来解决,但是代码实现的过程中就走上了复杂的路,但是官方题解给的代码则相当简洁。这说明我思考的不够深入,导致化繁为简的能力不够强。原创 2024-08-13 22:50:25 · 173 阅读 · 0 评论 -
【递归】使用递归方法解析json格式的字符串保存到字典中
这并非是一道简单题,如果能在20min内写出来,便具备了优秀程序员的基本素养了。原创 2024-08-12 01:41:38 · 128 阅读 · 0 评论 -
【LeetCode】148.排序链表
这是一道很好的面试题。考察了链表、排序等基本数据结构的使用。同时还融合了递归(分治)的思想。同时分析归并排序的复杂度也不是一件很轻松的事情,值得学习。原创 2024-08-11 10:04:49 · 170 阅读 · 0 评论 -
【LeetCode】133.克隆图
不得不说,本题的官方题解写的代码确实优秀!本题的关键点是使用了一个哈希表存储了旧节点到新节点的映射。原创 2024-08-04 19:58:13 · 318 阅读 · 0 评论 -
【LeetCode】207.课程表
这题的官方题解给出了一个深搜版本的代码,值得学习。原创 2024-08-04 19:35:20 · 264 阅读 · 0 评论 -
【LeetCode】45.跳跃游戏II
如果对于贪心算法不熟悉的话,这道题挺难想的。我一直认为关键点在于:如何把某段区间里面的值都给改成相同的步数,甚至想到了前缀和差分。但其实并不用那么麻烦。只需要维护在到达本次最远位置之前能达到的最远位置即可。每次到达最远位置后便更新一下step,最后返回step。原创 2024-08-04 11:46:00 · 370 阅读 · 0 评论 -
【LeetCode】33.搜索旋转排序数组
说实话,这道题挺难想的。难点在于,数组非完全有序就会让人产生错觉(这道题无法二分)。的复杂度,那我觉得我肯定不会想到。基于这个性质,可以得到下面这个代码。原创 2024-08-04 00:37:35 · 205 阅读 · 0 评论 -
【LeetCode】219.存在重复元素II
滑动窗口类的题目的典型做法是在窗口内部维护一个哈希表。原创 2024-08-03 10:06:13 · 206 阅读 · 0 评论 -
【LeetCode】108. 将有序数组转换为二叉搜索树
这虽然是一道简单题,但是考察的点还挺丰富,二分法,递归,平衡二叉树都考察到了。是一道不错的面试题。原创 2024-08-03 08:50:50 · 315 阅读 · 0 评论 -
【LeetCode】202.快乐数
不要觉得是简单题就懒得思考了。一名优秀的程序员应该主动将时间复杂度、空间复杂度都调至最优!原创 2024-08-02 22:11:10 · 354 阅读 · 0 评论 -
【LeetCode】16. 最接近的三数之和
三数之和这道题被反复考到,但是我一次都没给写出来,真是汗颜!本题是三数之和的一道变形题,也是一道好题!本题有两个关键点:其一,双指针是怎么个用法?在本题中是怎么实现的?其二,如何判断要终止当前的这轮迭代?(与target这个值进行比较,决定该怎么迭代查找。)原创 2024-07-30 20:32:26 · 116 阅读 · 0 评论 -
【LeetCode】136.只出现一次的数字
熟练掌握基本知识是专业的体现。必须得对各种常用API了熟于胸。原创 2024-07-25 08:14:53 · 583 阅读 · 0 评论 -
【LeetCode】201. 数字范围按位与
这题挺难想的,我到现在还没想明白,为啥只用左区间和右区间就能找到目标值了,而不用挨个做与操作?原创 2024-07-24 22:47:17 · 362 阅读 · 0 评论 -
【LeetCode】71.简化路径
我写的代码跟官方题解还是有很大差距的。找出差距,刻意练习。原创 2024-07-24 22:20:04 · 381 阅读 · 1 评论 -
【LeetCode】86.分割链表
这题没有太大难度,主要是熟悉代码。原创 2024-07-23 23:58:15 · 350 阅读 · 1 评论 -
【LeetCode】80.删除有序数组中的重复项II
思路很好想到,但是实现起来不是那么容易。原创 2024-07-21 15:36:00 · 242 阅读 · 0 评论 -
【LeetCode】69. x 的平方根
二分法典型题。原创 2024-07-20 15:37:08 · 202 阅读 · 1 评论 -
【LeetCode】67. 二进制求和
何为基本功?对一个语言基本函数库的熟悉就是基本功的体现,对底层计算机知识的了然于胸就是基本功。作为一名程序员,你要对你常用的语言要非常熟悉,知道每个API是什么意思,直到有哪些实现的函数,只有做到这些,才有可能称得上专业。原创 2024-07-20 12:03:38 · 209 阅读 · 0 评论 -
【LeetCode】222. 完全二叉树的个数
什么是计算机基础?如果本题能够用二分+二进制+二叉树的方式解出本题,那么我可以认为你的计算机基础好。很久以来,我一直认为自己的计算机基础好,但是自刷题以来,跟网上这么多优秀的同学相比,我发现我实在是弱爆了。原创 2024-07-20 08:30:38 · 279 阅读 · 1 评论 -
【LeetCode】162. 寻找峰值
本题是一道优秀的二分算法题目。优秀的地方在于,一改传统二分法的判断标准(以前后元素的值比较为标准)。同时为了将代码变得优雅,需要对代码进行一个trick处理。原创 2024-07-17 23:38:24 · 391 阅读 · 0 评论 -
【LeetCode】125. 验证回文串
熟练使用python自带函数会大大降低编码复杂度。原创 2024-07-14 16:38:33 · 155 阅读 · 0 评论 -
【LeetCode】27. 移除元素
双指针经典例题?原创 2024-07-14 05:55:12 · 237 阅读 · 0 评论 -
【LeetCode】 112. 路径总和
深搜的代码就需要注意三点:(1)终止条件是什么?(2)继续深搜条件是什么?(3)深搜函数返回什么?总结完这类题:就会发现在清楚逻辑后,这个世界真的简单了很多。以前需要1个小时搞定的题,现在只需要15min。你很难不快乐!原创 2022-08-15 23:33:24 · 136 阅读 · 1 评论 -
【LeetCode】205. 同构字符串
认真地分类讨论,评判复杂度,再决定是否要写代码执行。整套流程干净利落,不存在主观臆想,也不会有对事实结果计算的巨大偏差。原创 2024-07-13 09:36:14 · 291 阅读 · 0 评论 -
【LeetCode】2187. 完成旅途的最少时间
本题想要找出一个达到 totalTrips 趟需要的最少时间成本t,那么对于题目来说任何大于t的数也会是解,但不是最优解;任何小于t的数都不是解。这样整个值域就被分成了两部分,区间[0,t) 和 [t, +∞)。二分法找出这个区间分界点,就是本题的最优解。原创 2024-07-13 07:03:01 · 279 阅读 · 0 评论 -
【LeetCode】1283.使结果不超过阈值的最小除数
典型的一道二分法题。在某种限制条件下取到最优值,且最优值满足单调性。原创 2024-07-12 08:22:39 · 171 阅读 · 0 评论 -
【LeetCode】2089. 找出数组排序后的目标下标
当有简单方法可以使用时,千万别绕远路了。原创 2024-07-11 23:38:18 · 200 阅读 · 0 评论 -
【LeetCode】633. 平方数之和
双指针典型题目。原创 2024-07-11 23:23:36 · 195 阅读 · 0 评论 -
【LeetCode】面试题 16.21. 交换和
质量还不错的一道题。这道题不难想,按照固定套路分析就能判断出使用二分法来解决。原创 2024-07-11 22:03:58 · 182 阅读 · 0 评论 -
【LeetCode】169. 多数元素
O(n)复杂度的解法挺难想到。本质思想类似于消消乐游戏,如果一个元素是数组中的众数,那么将众数跟剩余的各个数相消,剩下来的那个数就是众数。但问题是,如何做到相消的代码逻辑?需要仔细领悟。原创 2024-07-09 23:57:31 · 225 阅读 · 0 评论 -
【LeetCode】239. 滑动窗口最大值
这题其实挺不好写的。知识点虽然重要,但细节非常繁琐,我这一次(20240709)花费了大概2个小时才写出这道题,但其实这还是我已经知道这道题是需要使用“单调队列”算法来求解,并我已事先学过单调队列算法了。所以知易行难,提升算法水平,还是需要老老实实的多敲代码。原创 2024-07-09 08:17:45 · 154 阅读 · 0 评论 -
【LeetCode】12. 小张刷题计划
稳住,能赢!没有经验的同学在面试岗位的时候,总是显得手忙脚乱,所以多练习,把技能提升,眼界提升,接着心态放平和,不要慌张,把面试题目读懂读透彻就会大大提升赢的概率。其实本题就是一道二分法解决的题目,只不过这里的二分法多了一个限制条件。原创 2024-07-09 07:40:59 · 331 阅读 · 0 评论 -
【LeetCode】976. 三角形的最大周长
虽然是一道easy题,但是要是在没有见过&面试的情况下直接写出来还不是那么容易。幸运的是,我做到了。本题的难点在于需要先排序,然后分析出最大周长三角形的条件,这样就避免抓瞎。原创 2024-07-02 22:05:34 · 379 阅读 · 0 评论 -
【LeetCode】746. 使用最小花费爬楼梯
从这道简单的题来看,动态规划做的事儿就是:(1)设定一个状态,这个状态可以需要用一个数组来记录;(2)确定状态间的转移公式;得出正确解原创 2024-06-30 18:14:00 · 287 阅读 · 0 评论 -
【LeetCode】368. 最大整除子集
虽然这题挺难写的,但是仍然提醒了我:解题要注意方法。在明确分析当一条道路走不通的时候,就不要再犹豫了,就要果断的换方法,尝试用其它方法解决。否则一味的消耗时间,得不偿失。换方法的前提是明确的分析(一定要落到纸上,为什么得不出结果?是复杂度太高?还是难以实现?)后得出的结论是不可行。原创 2024-06-30 10:56:09 · 327 阅读 · 0 评论 -
【LeetCode】最长回文子序列
看来这题确实是不会写,今天(20240630)写的时候又败北了。错误原因是递推式的分析出现了错误。我没有考虑dp[left][right] = max(dp[left][right-1], dp[left+1][right])这一分类。这一分类需要做的本质原因是:题目要求最大回文子序列,子序列不是子串,只要相对位置保持连续一致即可,所以如果在自己没法得到答案的时候,就需要抄一下前人(`dp[left][righ-1], dp[left+1][right]`)的答案。原创 2022-10-23 21:49:51 · 750 阅读 · 0 评论 -
【LeetCode】164. 最大间距
本题是肯定是需要使用排序方法才能得到答案,但有什么好的方法能在O(N)的时间要求里排好序呢?基数排序满足题目要求,其能在O(N)的时间复杂度和空间复杂度里对整数数组进行排序。原创 2024-06-29 23:15:40 · 314 阅读 · 1 评论 -
【LeetCode】53. 最大子数组和
刚开始拿到题目,没有什么想法。但是开始分析起来的时候,就立马有思路了。所以做题要敢于分析,敢于思考,敢于动脑。原创 2024-06-29 10:15:27 · 281 阅读 · 0 评论 -
【LeetCode】 49. 字母异位词分组
这道题的思路不是那么好想到。有两种解决方法:(1)暴力法;但是这种方法的复杂度还是挺高的。(2)映射法。因为是需要把由相同字母组成的单词放到一块儿,所以可以理解成相同字母的单词的key是相同的。那么怎么得到这个key呢?可以用数组记录。原创 2024-06-28 21:06:42 · 286 阅读 · 0 评论 -
【LeetCode 3】无重复字符的最长子串
思想就是双指针,left=right=0。从左到右遍历字符串,right递增,同时将遇到的字符放到set中。遍历的过程中,判断set中是否已经存在该字符了,如果存在,那么就递增left,直到遇到左指针与右指针所指位置的字符相等。相等时,将left加一。再递增right,这个过程中找到最大值即可。原创 2024-06-27 22:25:29 · 301 阅读 · 0 评论