
leetcode刷题
主要记录自己刷题时对题目的一些思考
zero_one_Machel
这个作者很懒,什么都没留下…
展开
-
leetcode234回文链表
怎么找链表的中点,快慢指针,快的一次走两步,是慢的二倍,所以快的到头以后慢的就到中点了,但是要区分。比如我们 1 2 3 2 1,只需要两边走到3就可以,但现在必须1 2 3 2 1都走完。递归在函数调用的时候会返回,走到最后一个我们让他和第一个比较。找到中点,然后就后半部分反转(头插法),再比较两个部分。1 2 3 2 1 和 1 2 2 1两种情况的中点。往右走可以通过next,往左通过递归的特性。因为是单链表,没法往回找,可以用递归。因为递归必须一层一层调完。但是递归需要走完序列。原创 2024-09-21 09:39:25 · 572 阅读 · 0 评论 -
leetcode206反转链表
相当于利用头插法,把A插到新的链表上,而不需要新申请空间。首先不要直接新建链表,而是把以前的利用起来。下面在调整链接是一定注意。原创 2024-09-19 17:30:54 · 397 阅读 · 0 评论 -
leetcode73矩阵置零
想到的就是需要一个数组来记录是不是这行或者这列是不是有零,然后最后再扫描一遍这个矩阵。借助第0行第0列来记录这个行是不是有0,这个列是不是有0。另外,这个矩阵不大,所以可能有重复的置0应该也没事。原创 2024-09-19 11:26:45 · 345 阅读 · 0 评论 -
leetcode160相交列表
一开始以为要固定A,然后循环B,这个复杂度也太高了。原创 2024-09-19 10:53:14 · 442 阅读 · 0 评论 -
Q48反转矩阵
矩阵的题要么一种顺序遍历,要么反转,可能是先左右再上下,然后再转置啥的。需要先转置,然后每一行再反转。相当于反转完又反转回去了。原创 2024-09-19 09:49:18 · 331 阅读 · 0 评论 -
Q239滑动窗口最大值
3 4 2 1,k=3 一开始你维护的是 4 3 2,右移你需要删除3,你怎么找到呢,二分?其实队列里不需要把区间内的都存进去,比如走到4,4是目前最大的,则接下来的移动两次区间的最大值都不可能从4左边找,所以只需要保存4前面的2 3 不需要保存,5 4 3 2 1,如果k = 3,这种都需要保存,因为你每次都舍弃最大的,需要接下来的倒数第二大保存,也就说,队列需要去除比新数小的所有数。此时是第一个窗口,最大值是队列第一个5,,同时因为需要右移删除的是5,所以队列5需要去掉,此时队列为 3 1。原创 2024-09-18 15:21:36 · 189 阅读 · 0 评论 -
leetcode438找到字符串种所有异位词
其实应该也是双指针,关键是自己没想到两个数组怎么比较大小,其实也是统计字符次数。但是超时,样例太长了。原创 2024-09-18 10:38:59 · 325 阅读 · 0 评论 -
Q6z字形变换
三个list,按照先加再减的顺序将字符串分到相应的list。考虑特殊情况,如果是1行,自己的判断list变化顺序就错了。原创 2024-08-08 18:24:26 · 252 阅读 · 0 评论 -
Q12整数转罗马数字
【代码】Q12整数转罗马数字。原创 2024-08-08 15:33:37 · 172 阅读 · 0 评论 -
Q15 三数之和
我的思路,先排序,循环确定前两个值,最后一个值二分。最后两个值可以使用双指针,因为是有序的,而且是求和。原创 2024-07-25 17:24:15 · 397 阅读 · 0 评论 -
Q134加油站
如果新的start是c,c在a-b之间,首先a-c是大于等于0的,c到b加上a-c的剩余汽油值一定是大于等于c到b的,但是a到b小于0,所以c到b也一定小于0。很清晰的可以看到,首先start加油站的left一定要大于0,然后从start开始一直到start-1,currentGas 一定要大于等于0。如果a->b此时currentGas小于0了,则新的start一定从b+1往后找,而不用从a+1往后找。首先找到合适的start。原创 2024-07-25 15:47:13 · 257 阅读 · 0 评论 -
Q238. 除自身以外数组的乘积
此时的result[i]则不是1,而是之前计算的一边的值。一开始result数组都是赋值1,所以在左右两个指针没有交叉的时候,看了题解,思路是存i左边的乘积和 与 i右边的乘积和。需要三次循环,需要额外空间 left和right数组。right是i右边的乘积(不包括i)left是i左边的乘积(不包括i)当左右两个指针交叉以后,一开始想到的是按位乘。原创 2024-07-25 10:56:01 · 272 阅读 · 0 评论 -
leetcode100相同的树
主要是递归,判断终止条件。原创 2024-06-19 15:22:21 · 278 阅读 · 0 评论 -
leetcode198 打家劫舍
比如 1 2 3 4 5 可以计算5 + 1, 但是5+1 一定不会是最大。因为你可以5+3+1,即 你在计算sum[3]的时候已经计算了1+3。有点像走楼梯,只是考虑相邻,也就是说你打算偷a[i],那你就不能偷a[i-1]的,然后可以递归的想。如果money[i]表示第i个房间的钱,sum[i]表示此时在第i个房间一共偷到的最多的钱。即 sum[i] = sum[i-2] +money[i];那还会不会隔更多呢,不会的。原创 2024-06-16 22:18:50 · 459 阅读 · 0 评论 -
leetcode 130被围绕的区域
可以循环边界,找边界的区域(利用深搜),这些都不能被围绕,其余的,能被围绕,应该从"O"变为”X“字符分别是大写的X和大写的O,我把O当成了0。一个区域不能被围绕是这个区域有部分在边界。原创 2024-06-16 15:06:28 · 368 阅读 · 0 评论 -
leetcode 200 岛屿数量
每一个点都会循环四个方向,但是不要再让他走他来过的那个方向,要不就死循环了。就是深搜,将可以走到的都标为0。原创 2024-06-16 14:14:02 · 320 阅读 · 0 评论 -
leetcode71简化路径
主要是字符串处理和栈的使用。原创 2024-06-15 23:18:52 · 312 阅读 · 0 评论 -
leetcode 11 盛最多水的容器
如果一个指针从i开始移动,只有移动到比最开始的height[i]值大的情况才有可能出现下一个最大值。原创 2024-06-11 22:27:46 · 298 阅读 · 1 评论 -
leetcode274H指数
其实就是找一个数组的h,h的定义是:h个大于等于h的元素,h越大越好将数组从大到小排序,只需要判断index+1和citations[index]的值index+1 代表的是目前有多少个元素,对于下面的例子排序后citations = [6,5,3,1,0]从前往后找。原创 2024-06-10 20:09:09 · 430 阅读 · 0 评论 -
55跳跃游戏
其实只需要遍历一遍数组,时刻更新可以最远的index,因为每一个记录的是从此处可以跳的最远步数,所以当index+可跳的步数大于数组长度即为true。原创 2024-06-03 10:43:46 · 378 阅读 · 0 评论 -
122.买卖股票的最佳时机Ⅱ
把题目抽象低买高卖,如果递增可以先不卖,但是一旦递减,比如第五天和第六天,降低了,应该在第五天卖,第六天买注意特殊情况,如果 1 2 3 4 5这个没有1中的改变,需要单独判断。原创 2024-06-02 21:27:16 · 271 阅读 · 0 评论