- 博客(11)
- 收藏
- 关注
原创 代码随想录算法训练营DAY13|二叉树(理论、DFS、BFS)
又是隔了好几天才补上二叉树的part 1。。。老师的讲解很系统化,从理论基础到递归遍历、迭代遍历、层序遍历,一环接一环,让人很容易跟上节奏,思路清晰,逐步巩固。确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。
2024-09-10 21:45:25 287
原创 代码随想录算法训练营DAY11|Leetcode 150、239、347
2. 题目要求“整数除法只保留整数部分”,而python中的 '/' 不是整除,‘//’是floor除法(向下舍入),因此要对除法做特殊处理(可以参考上述的示例代码),我自己的代码中用的是强制int转换。push(value):如果push的元素value大于入口元素的数值,那么就将队列入口的元素弹出,直到push元素的数值小于等于队列入口元素的数值为止。看完视频讲解和示例代码后,自己学着写代码。pop(value):如果窗口移除的元素value等于单调队列的出口元素,那么队列弹出元素,否则不用任何操作。
2024-09-04 19:30:00 847
原创 代码随想录算法训练营DAY10|Leetcode 232、225、20、1047
思路:用stackin 和 stackout两个栈来实现队列,比较复杂的操作是移除首部元素pop()函数:要将stackin进栈数据全部导入到stackout,再从stackout弹出数据。思路:初始化一个空栈,遍历字符串,将遍历过的元素依次存入栈,若当前元素等于栈顶元素,则弹出该栈顶元素,以此类推,直到遍历完成,最后栈内剩余的元素组合起来就是最终的字符串。思路:用一个队列实现,移除栈顶元素pop()函数的实现:将队列头部的(size-1)个元素依次添加到队列尾部,再弹出最后一个元素。
2024-09-03 19:23:05 800
原创 (补)代码随想录算法训练有营DAY9|Leetcode 151、卡码网55
1. 看文字讲解中的另一种思路是:先删除空白,然后整个反转,最后单词反转。首先删除字符串的前后空白,用的是strip()函数;单词反转是将反转后的字符串进行split()拆分再反转单词。总体来说,由于python字符串处理特性和一些库函数的存在,用python做字符串题的难度要小于讲解中的C++。1)拆分可直接使用split()函数,在此过程中直接将字符串中多余空格的问题一并处理了。例如,反转字符串类的题目需要将其转换成列表,然后通过join()函数再将其转换成列表,因此。”的思路,移步==>>
2024-08-30 12:32:30 452
原创 (补)代码随想录算法训练有营DAY8|Leetcode 344、541、卡码网54
2. Python中的库函数:s.reverse(),s[:]=reversed(s),以及切片用法 s[:] = s[: : -1]思路:沿用344.反转字符串中的reverse()函数思想,将字符串转换为list后,通过切片方式将字符串进行反转操作。2. Python中, 对字符串 s='abc' 使用 s[0:99]时,返回的仍是 'abc'。,例如s[0] = 'a', s[0:2] = s[0:2][0:2:-1]等是非法操作。状态:挺简单的,双指针思想,看了下视频确认自己的思路正确后写代码。
2024-08-27 21:46:25 440
原创 (补)代码随想录算法训练有营DAY7|Leetcode 454、383、15、18
注:left 和 right 的去重逻辑必须放在收取一个结果之后,比如考虑特殊情况:全0数组,此时的[0,0,0]是符合条件,但如果将left 和 right 的去重放在while循环最开始,[0,0,0]这样的数组就无法被获取。2. 遍历前两个数组,dict()初始化为空字典 {} ,进行dict()的键值对更新时,用的是if判断语句:如果key存在,则更新sum[key] += 1;哈希表第二部分,进一步体会哈希表的适用场景,双指针的使用、以及在三数之和、四数之和的去重和剪纸问题。
2024-08-26 23:58:10 653
原创 (补)代码随想录算法训练有营DAY6|Leetcode 242、349、202、1
3)方法三:使用字典+集合方法,先用dict存第一个数组的所有元素,再用一个for循环遍历第二个数组,查看其元素是否存在于dict中,同时用set存储交集。2. 哈希法:使用一个dict()存储遍历过的元素(同时存数值和下标),在遍历数组的同时,从dict()中查找是否存在某元素等于(target - 当前所指向的元素)直接使用python中set()的自带功能找交集,set() & set()或set().intersection(set())状态:直接使用python中set()的自带功能,一行搞定;
2024-08-23 19:26:36 963
原创 (补)代码随想录算法训练有营DAY4|Leetcode 24、19、面试题 02.07.、142
修改后为pre -->2 -->1 -->3 -->4。否则pre -->2操作后,指向节点1的指针就断开了,后续的2-->1的操作就无法进行;2. 看过视频讲解,使用的时快慢指针法,这个思路很巧妙:快指针先走n+1步,之后快慢指针一起移动,直到快指针指向末尾的None, 此时慢指针所指向的就是倒数第n个节点的前一个节点,即可进行删除操作。2)找环的入口(理论推导建议看老师的视频):一个从链表头部开始的指针idx1,一个从环内的相遇点开始的指针idx2,两者同时向后移动,直到两者相等即为找到入口。
2024-08-22 19:07:02 601
原创 (补)代码随想录算法训练有营DAY3|Leetcode 203、707、206
链表的下标是从0开始的,要注意题目要求,以决定何时用判断index > self.size,何时用index >= self.size。3. 删去第n个节点的关键思路是:只有保证第n个节点是cur.next,才能将第n个节点的前一个节点(也就是cur)指向第n个节点的后一个节点,从而删去第n个节点。2. 在第n个节点前插入一个节点的关键思路是:只有保证第n个节点是cur.next,才能用cur操作在cur.next前插入一个节点。1. 双指针方法有更易懂,思路更明晰,不过要注意对指针赋值的顺序。
2024-08-21 21:41:21 629
原创 代码随想录算法训练有营DAY2|Leetcode 209、59
文章链接:209.长度最小的子数组59. 螺旋矩阵209. 长度最小的子数组状态:二刷,7分钟AC,但while loop还是没有掌握牢固思路:滑动窗口,关键在于确定滑动窗口的大小(即起止位置)窗口起始位置的移动:当前窗口的值(子数组所有元素的和)大于等于s时,就要将起始指针向右移动了,即缩小滑动窗口,i += 1窗口结束位置的移动:遍历数组的指针,for循环的索引总结:1. 第一次写时,用的是if sums >= target判断,而不是while loop。
2024-08-15 16:48:39 391
原创 代码随想录算法训练营DAY1 |Leetcode 704二分查找、29移除元素
int((left + right)/2)时, left+right可能会引起溢出,所以用mid=left+(right-left)//2。如果赋值后的左指针依然是val==target,就继续将当前右指针的值赋给左指针,以此类推,直到left
2024-08-15 10:04:50 304
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人