leetcode-hot100
星沁城
这个作者很懒,什么都没留下…
展开
-
234. 回文链表
对于这题做过206. 反转链表 的同学肯定容易想到,我们直接把后半段链表翻转一下不就可以一起比较了吗。原创 2024-11-08 11:16:12 · 409 阅读 · 0 评论 -
206. 反转链表
题目提示通过递归或迭代实现,其中递归好实现我们只用一直推到尾节点后return然后指向当前节点就行。原创 2024-11-08 11:14:59 · 231 阅读 · 0 评论 -
160. 相交链表
我们首先想到肯定是让两条链表上的节点同时指向下一个节点看是否相同,但是由于链表的长度不一致我们没法对齐,所以我们需要优先解决这个问题,通过先将两个链表遍历一遍知道长度然后根据相差的距离使长的链表跳过这些节点(相交节点一定不在这些节点中)。当然因为两条链表的重叠部分其实是同一内存地址的,所以我们也容易想到用hash来解决,先将一条链表存入,再去寻找另一条链表中的节点,一个在hash中找到的就是目标接节点.时间复杂度O(n+m),空间复杂度O(min(n,m))时间复杂度O(n+m),空间复杂度O(1)原创 2024-11-08 11:13:23 · 128 阅读 · 0 评论 -
240. 搜索二维矩阵 II
首先矩阵本身具有一定的规律性,我们想要快速搜索肯定要利用,快速搜索的本质其实还是减少可能的匹配方案也就是减少分支,我们如果从(0,0)点开始搜索我们无论是往右还是往下走都是变大的,这样显然是会增加分支的,比如eg1:(0,0) = 1, target = 5,我们往右往下都可以,所以我们就需要改变开始点,一条路增大一条路减小这就满足我们的约定,右上点或左下点都可以。原创 2024-11-07 21:36:53 · 366 阅读 · 0 评论 -
48. 旋转图像
因为题目要求我们在原矩阵上操作所以我们肯定需要寻找旋转前与旋转后两个点的变换规律,我们将矩阵拆成几个一圈一圈构成的环,每次的旋转都是把环的上边换到右边,右边换到下边,下边换到左边,左边换到上边;可以发现具有如下规律(i,j)->(j,n-i-1)或(n-j-1, i)->(i,j),而且由于正方形的特性经过四次变换后又回到了原点,这就代表我们只需要遍历一条边然后对该边的每一点都变换四次就能完成对该环的旋转。原创 2024-11-07 21:35:13 · 188 阅读 · 0 评论 -
54. 螺旋矩阵
2.在各个方向的边界也是可以确认的,在改变方向后,行进方向上的边界需要改变,向右上边界+1,向下右边界-1,向左下边界。初始边界:上:0,右:matrix[0].length-1,下:matrix.length-1,左:0。1.在朝某一方向行进到头后的改变方向是确定的,左->下,下->右,右->上,上->左。3.可以通过边界和计数来判度是否结束。原创 2024-11-06 16:37:29 · 295 阅读 · 0 评论 -
73. 矩阵置零
因为当我们记录i,j是需要置0的行和列时,我们可以使用原矩阵的首行和首列置0来代替集合记录,因为后续操作这些位置也要置0的.时间复杂度O(nm),空间复杂度O(1)我们可以使用两个vector来记录需要置零的行和列,然后遍历这两个vector,将对应的行和列置零。这样的空间复杂度最大是O(n+m)时间复杂度O(nm),空间复杂度O(n+m)原创 2024-11-06 16:35:24 · 702 阅读 · 0 评论 -
41. 缺失的第一个正数
如果这题没有时间复杂度的要求那这题就很简单,我们直接两个for循环,一个for循环从1开始遍历,另一个遍历数组,如果当前值不在数组中,那么这个值就是我们要找的值,直接返回即可。接下来我们尝试满足空间复杂度,我们要找最小的正整数所以当数组以nums[i-1] = i样式放置时,我们很容易判断那个数缺失,我们只要看哪个下标不满足这个规则就行。但是这题要求时间复杂度是O(n),空间复杂度是O(1),所以我们就不能使用额外的空间了,那我们就只能使用数组本身来存储了。原创 2024-11-06 16:32:05 · 203 阅读 · 0 评论 -
189. 轮转数组
nums = [1,2,3,4,5,6,7], k = 3,我们发现对于示例来说我们从1开始不断使下标+3,1->4->7->3->6->2->5->1我们刚好能一个周期将所有数遍历完.nums = [-1,-100,3,99], k = 2,而对于这个示例我们需要两遍,-1->3->-1, -100->99->-100。多找几组规律后我们能发现遍数与nums.length和k的最大公约数gcd决定。原创 2024-11-05 09:43:10 · 161 阅读 · 0 评论 -
238. 除自身以外数组的乘积
以上是通过找规律发现的,当然通过类似前缀和的方法也是比较容易实现的,我们用res[i]来记录nums[0...i-1]的乘积,用res[i+1...n-1]来记录nums[i+1...n-1]的乘积,然后我们第二次遍历的时候我们使用rSum来记录res[i+1...n-1]的乘积,最后res[i] = res[i] * rSum。1.当nums全为非零数时,我们只需要记录总乘积aggMultiply,然后每个位置的答案就是aggMultiply/nums[i]3.当nums有一个以上0时,全为零。原创 2024-11-05 09:38:25 · 307 阅读 · 0 评论 -
56. 合并区间
观察示例我们很容易想到将所有的边界点排个序再看看哪些能合并成一个新区间,而对于新区间来说他一定是由一个原先区间的开始边界和一个终止边界构成。我们应该只对开始节点排序,大致思路与上面是一样的我们先构造可能的区间然后去更新这个预测的区间。Eg:1 2 3 6 8 10 15 18 用s代表开始,t代表结束。1是s,2是s,3是t,6是t,8是s,10是t,15是s,18是t。所以我们能得到的新区间是[1,6] [8,10] [15,18]有点问题我们不能将所有点都拆开排序,这样会破坏原有的结构。原创 2024-11-04 21:42:35 · 304 阅读 · 0 评论 -
53. 最大子数组和
我们可以想到动态规划来解决,首先定义f[]数组,f[i]:代表以nums[i]结尾的最大子数组和怎么得到f[i]呢?有两种情况:1. f[i-1] > 0, f[i] = f[i-1] + nums[i],加上大于0的数肯定比自身大2. f[i-1]原创 2024-11-04 21:41:14 · 105 阅读 · 0 评论 -
76. 最小覆盖子串
使用滑动窗口,记录窗口中的字母的个数;当满足(或大于)目标串个数时缩小窗口,当不满足时扩大窗口。原创 2024-10-11 11:48:05 · 120 阅读 · 0 评论 -
72. 编辑距离
那么我们又该如何知道hors—>ros,horse->ro,hors->ro要多少步呢,我们按照上面的方法对这些情况再推导,很显然可以推导到最开始的一步也就是 ""(空)->r, h->""(空), ""->""需要多少步,显然我们知道花费的步数是1,1,0所以沿着推导链我们就能推导到我们要的情况。所以我们需要转变思路用小的情况推大的情况(我们先不会考虑最短情况应该是怎样的,如果我们能将所有的可能方式都例举出来那么最小值自然是这些方案中的最小的那个,所以我们下面的推导只是可行推导,是不是最佳不考虑)原创 2024-10-11 11:44:03 · 171 阅读 · 0 评论 -
239. 滑动窗口最大值
最初想法:用hashmap记录窗口中出现的数字的个数,maxNum记录当前窗口的最大数,当窗口滑动后左侧数个数减一,右侧数个数加一,同时查看原最大数的个数是否为0,如果为0:遍历当前hashmap中的key找到最大的,如果不为0:将新加入的数与原最大数比较,但是timeout了。因为TreeMap的那个做法花费的时间是500多嘛,就又学习了一下大佬的题解写了这个用单调队列的做法。后面我又想如果把查找时间压缩到log n级别行不行,也就是用二分找。呵结果还是T了(哭)原创 2024-10-10 20:38:43 · 342 阅读 · 0 评论 -
560. 和为 K 的子数组
还有优化的空间,如果我们引入hash就可以将查询时间压缩到log(1)最初想法是滑动数组:当窗口框住的数和小于给定数时窗口右界移动。反之窗口左界移动,但数组有正有负,且不有序,后面察觉无法实现。后面想到使用前缀和解决。原创 2024-10-10 20:25:59 · 136 阅读 · 0 评论 -
3. 无重复字符的最长子串
【代码】3. 无重复字符的最长子串。原创 2024-08-28 11:56:28 · 96 阅读 · 0 评论 -
438. 找到字符串中所有字母异位词
【代码】438. 找到字符串中所有字母异位词。原创 2024-08-28 11:57:31 · 110 阅读 · 0 评论 -
42. 接雨水
【代码】42. 接雨水。原创 2024-08-28 11:55:17 · 92 阅读 · 0 评论 -
15. 三数之和
【代码】15. 三数之和。原创 2024-08-26 22:20:26 · 128 阅读 · 0 评论 -
11. 盛最多水的容器
【代码】11. 盛最多水的容器。原创 2024-08-26 22:18:25 · 124 阅读 · 0 评论 -
283. 移动零
【代码】283. 移动零。原创 2024-08-26 21:58:47 · 128 阅读 · 0 评论 -
128. 最长连续序列
【代码】128. 最长连续序列。原创 2024-08-25 14:16:39 · 84 阅读 · 0 评论 -
49. 字母异位词分组
【代码】49. 字母异位词分组。原创 2024-08-25 14:09:13 · 98 阅读 · 0 评论 -
1. 两数之和
【代码】1. 两数之和。原创 2024-08-25 14:06:18 · 113 阅读 · 0 评论