- 博客(27)
- 收藏
- 关注
原创 hot100_part5_普通数组
一开始没怎么理解题目意思,还是看给的案例才明白要找的第一个整数是哪个。自己想到了一点,但没坚持想下去,还是卡住了,把给的数组映射到正整数数轴上,然后再找到第一个缺失的正数。题目要求的时间复杂度O(n),空间复杂度O(1)。排序的话时间复杂度最小也是O(nlogn)了。
2025-03-17 01:33:20
622
原创 leetcode hot100_part14_贪心(完)
2024/8/8双指针,往可能较大的方向去移动。当处于某一个状态时,是移动左边还是移动右边的指针,这两种选择哪一个的结果更好?往更好的方向走。如果都不行,就两个都移动,成为一个新的状态。10/11一般的视角是把关注点放在后面,找每个位置后的最大值,这样就需要遍历 i 后面的每个位置;把视角放在每个位置之前,假设我们在第i天卖出,同时维护遍历过位置的最小值(i之前的最小值),就能算出第 i 天卖出的最大利润;O(n*n)到O(n)
2024-10-14 15:38:36
300
原创 leetcode hot100_part02_双指针(完)
当前遍历位置不为0,左右指针一起前进,前进到为0的位置,左指针停下,右指针继续前进,右指针直到前进到第一个不为0的位置,然后交换,再一起前进;
2024-09-13 11:29:05
1028
1
原创 leetcode hot100_part01_哈希(完)
遍历数组,map中存在target - nums[i]就返回结果,不存在就把当前元素存入map;
2024-09-12 09:46:29
455
原创 leetcode hot100_part04_子串(完)
总体的思路,不着急删除(不要想着窗口动一次删一次),因为我们要的是每个窗口的最大值:窗口每移动一次,就把新遍历到的元素加入优先队列,然后取到优先队列的队头元素(队列里所有元素当前的最大值)。如果先把当前前缀和放入map,j就可以取到i,结合上面的分析如果此时[0,j] j=i是一个满足条件的pre[i] - k,那么对应的子数组长度为0;不存在,这种情况对应的k=0;关键的是,如果这个元素不在当前的滑动窗口范围内,删除,继续取队头元素,直到取到的元素在当前窗口的范围内,再把这个答案放到结果集合里。
2024-09-11 12:28:22
820
2
原创 leetcode hot100_part17_技巧篇(完)
结合题目给的数据特征,使用位运算中的异或^;异或的结果很好记,相互不同就是1,相同就是0;同或一样的。
2024-09-08 18:16:33
1238
1
原创 leetcode hot100_part28_图论
做完了这四题,总结一下,还是要掌握基本的dfs,bfs模版,都是在这些基础上变换的。
2024-05-15 21:55:03
1197
1
原创 hot100_day18(最长回文子串,最长有效括号)
找到字符串中最长的回文串。自己想到的方法是笨遍历,设置双指针从两端开始遍历,寻找每一对相等的位置,再判断该对位置是否为回文(用一个函数判断)。再设置变量记录更迭最大回文串的长度,最后输出。光是找每一对可能得low,fast的时间复杂度就是n方了。总共n的三次方。
2024-04-07 16:47:31
461
原创 leetcode hot100_day16(杨辉三角,单词拆分)
自己的解法,一行一行构造超出了内存限制。把 j 的范围用i限制之后不会爆内存了但会超时, 因为第i行的长度也是i,后面显示数组越界,因为原来是把init的最后一个元素remove掉了。这里极有可能会影响之前的行,或许是因为引用变量?所以第二行的长度也变为了1,导致后面循环的时候数组越界。j+1的地方。又搞了个init2,结合输出来看,第一个元素是1,1而不是1。说明init后面的改变对之前产生了影响。那么init2也是,一切都是引用变量搞得鬼吧。怎么那么想当然呢。
2024-03-29 11:56:06
194
1
原创 leetcode hot100_day14(零钱兑换,完全平方数)
完全背包的变形。为什么?因为每个硬币可以选很多次。注意初始化要最大值,因为要求的是最少的组合。还要注意,amount代表的是背包的最大容量,不同面额的硬币代表不同的物品,物品体积就是面额,物品价值为1,因为你要求的最少的硬币数目。一维数组留个坑,想清楚初始化的问题。评论里有很多背包问题的总结,后面看吧。
2024-03-26 20:36:15
506
原创 hot100_day11(两两交换链表节点,K个一组翻转链表)
当时做的时候就该记录一下,现在忘记了,让我想想。懂了去两个翻转指向后,要指向后面两个的第二个,因为后面两个也要翻转。
2024-03-22 16:52:38
304
1
原创 hot100_day10(合并两个有序链表,合并K个升序链表,排序链表)
题目里说拼接,那应该不能复制,地址不能变,这个题目不知道做过多少次了,看到这个总会想到归并排序。
2024-03-18 19:20:32
525
原创 hot100_day09(回文链表,环形链表|、||)
快的一次两步,慢的一次一步,走一段时间后二者总会都走到了环里面。经过有限步(小于环的大小)后二者一定会相遇的,这就是一个简单的追及问题,假设二者之间相差x步,将快指针视为在慢指针之后,那么二者在经过x步的循环之后一定会相遇,此时慢的走了x,快的走了2x正好重合。真气死了,各种小错误,改了又改最后超时。自己的想法是快慢指针,首先是拿到首尾节点然后首节点走一步,尾结点每次走n-1步。第二种就是翻转链表的后半部分然后比较,用上快慢指针(注意快慢指针的运用),一次走一步和一次走两步获取后半段链表的开始节点。
2024-03-16 16:32:25
415
1
原创 hot100_day08(相交链表、反转链表、删除链表的倒数第n个节点)
思路:先获取两个链表的长度差,让长度较长的链表先走长度差个步数,然后在开始一起遍历直到地址相等的位置返回。注意审题,一开始没过的原因是头结点搞错了,题目中的头结点就是链表的第一个含值节点,而不是附加的头结点。关于官方的方法,首先是哈希表感觉前面做二叉树的时候见过,将其中一个链表的所有元素都加入哈希表,然后查找另一个链表中是否有元素存在其中。官方的第二种解法就是数学,画个图也就明白了,不过多叙述。
2024-03-13 19:44:04
1171
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人