- 博客(21)
- 收藏
- 关注
原创 刷题营 二叉树 572. 另一棵树的子树
递归三要素:输入,输出;只能通过部分用例,找不到错误出在哪里?二叉树的最大深度,用回溯算法没有写出来。二叉树的最小深度,还需要再看下解说。递归函数就是单层的实现逻辑。
2023-07-23 22:11:29
40
原创 labuladong 双指针:5. 最长回文子串没有刷出来,370. 区间加法 重要
差分可以定义成一个类,包含创立差分数组,增减操作,还原数组三个函数。将原链表分为P1X,再把这两个链表拼接起来。有个指针P,指向cur1和cur2值偏小的那个。prSum【i】表示数组前i-1个元素之和。要新建一个链表,一般要构造虚拟头结点。最后还要把没有遍历完的那个链表放进去。数组的双指针基本和代码随想录重合,然后用类实例的方法做题。
2023-07-15 17:35:22
69
1
原创 回溯理解很困难,回去刷字符串
回溯方法模板反转字符串:reverse()函数反转字符串2:需要再看看利用切片的写法可以记住,很方便p=0p2=p+ks=s[0:p]+s[p:p2][::-1]+s[p2:](中间切片反转的写法)p=p+2*kreturn s。
2023-07-08 17:01:14
25
原创 重刷数组 滑动窗口
滑动窗口的应用,注意min_len初始值设为float(‘inf)’ ,如果没有结果,则min_len一直是float。库中的一个函数,可以用来统计一个 python 列表、字符串、元组等。探讨元素是否在某个集合里,最好是用哈希表(这里用字典来存储)记住Counter()函数的用法,enumerate用法。中每个元素出现的次数,并返回一个。
2023-07-07 19:42:45
39
1
原创 重刷双指针 退格字符串要重视
解答:由于 # 号只会消除左边的一个字符,所以对右边的字符无影响,所以我们选择从后往前遍历 S,T 字符串。slow+=1(因为需要向slow中填数据,应该先加1,避免覆盖原有数据)slow1-=1(在测试。时出错,不知道#号到0位置应该怎么处理?
2023-07-05 22:08:37
26
原创 刷题营 16天
题解:求二叉树的高度用后序遍历,求深度用前序遍历,此题中根节点的高度就是最大深度,所以用后序遍历。完全二叉树判断满二叉树的方法:最左边子树的深度和最右边子树的深度相等,不需要遍历中间节点。题解:需要考虑左子树为空或者右子树为空的情况。递归一定要注意终止条件 (node为空)题解:普通二叉树直接用递归遍历就可以了。满二叉树的节点计算:2的N次方-1。递归的方法要掌握,很简单。
2023-07-03 22:28:21
33
1
原创 刷题营 第14天
二叉树的实现是链表,要记住自己定义二叉树,遍历就是用递归,记住递归传入的参数和返回值,递归结束条件, 不断缩小规模。后序遍历 中左右-》中右左-》翻转result列表得到左右中。递归法必须掌握,迭代法可以先了解。
2023-06-25 22:08:13
23
原创 刷题营13天 (重点关注前K个高频元素)
在单调队列里面,怎么判断什么时候应该计算一下最大值?第一次遍历K,输出第一个最大值,后面遍历【k,size】,每次都必须输出一个最大值。题解:最重要的是随时维护自定义的单调队列,保证出口处的元素是滑动窗口的最大值,并且只加入有可能成为最大值的元素。初始思路:统计各个元素出现的次数,用字典;然后按字典的值排序,最后输出前K个字典的键。题解:只需要维持前K个元素,用堆的数据结构,堆里面只有K个元素。利用大顶堆:最后留下的是集合中最小的K个元素。利用小顶堆:才能留下集合中最大的K个元素。学习heapq库的用法。
2023-06-18 22:07:26
31
原创 刷题营 第11天
一般这种语境的队列默认是单端先进先出的的,把前n-1个元素先弹出,在从队尾加入,再弹出的就是最后一个。return self.que.pop()(利用双端队列中从队尾弹出元素,也能编译通过)操作不难,但还需复习,熟练掌握。
2023-06-17 20:23:48
32
1
原创 刷题营 第九天
reversed是函数,reverse是方法,上面的代码中,我们使用list()将reversed()函数返回的对象转换回列表。(ss.find(s)要么返回匹配的第一个位置的下标,要么返回-1,题目要求返回True和False,所以要加上!s[0:n]=s[0:n:-1](这一步是错误的,她直接把前n个字符去掉了,ss=s[1:]+s[:-1](去掉s+s 的首字符和尾字符),这样避免在s+s中搜索出原来的s,我们要搜索的是中间拼接出来的s。掌握用find方法的实现就行了。利用数组的切片就可以实现。
2023-06-17 16:10:20
24
1
原创 刷题营 第7天
if n1+n2 in record:(请问有什么错误)使用数组,存a+b的值,以及出现的次数。四个数组两两分组循环,时间复杂度N方。
2023-06-14 17:12:58
36
原创 刷题营 第四天
初始想法:链表相交的点条件是curA.next=curB.next,但由于链表长度不一样,curA和curB可能需要移动不同的步数才能走到相交点(如curA两步,curB三步),没有想到如何操作这个不同?cur指针必须在需要操作的两个节点前面,可以直接画个链表,最重要的是指针改变的顺序,标蓝色的两根线会断掉,必须先保存两个指针的值(cur.next和cur.next.next.next)ast一次走两步,slow一次走一步,在进入环内后,快指针走一圈后一定能追上慢指针。sizeA+=1(求链表的长度)
2023-06-10 20:56:58
31
1
原创 刷题营第三天
return head(开始没有加这两句,导致测试在【】时程序出错,通过检测测试案例检查出来)在节点N插入节点:一定要保证current.next 指向N节点,这样才能在current这个节点操作。(测试用例通过,但显示超出时间限制,暴力算法不可取,利用双指针方法会很简单,这是一个升序的数列)首先都要判断N的合法性,应该0
2023-06-08 22:06:19
25
原创 刷题营第二天
螺旋矩阵要搞清楚offset和起始点的关系,offset的意义在于 结束一圈后 起始位置向后移 结束位置向前移,以n=4的矩阵,第二圈startx=1,n-offset=2,实际每条边只需填一个数。就是用float inf构造一个长度等于nums 长度的新数组,其中float inf 是单精度浮点数的最大值,直接用res=[],后面写res=[]就越界了。i-=1(不应该放在if循环内,不论是填入左指针还是右指针的值,都会执行i-1的操作,应该放到if-else语句后)# i,j初始化在0,1位置。
2023-06-07 22:26:57
301
原创 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素。
明确需要依靠双指针,但一直在思考利用双指针把0和非0元素调换位置,若fast=0,而fast+1不为0,则 temp=slow,slow=fast,fast=temp ,发觉很麻烦,利用移除0,然后在slowindex后面补齐0,这个思路很简单。感觉利用左开右闭区间更容易理解,编程过程中遇到mid溢出问题,需要注意。(有错误,无论什么情况,fast都要加1,因此不应该放到else后面)
2023-06-06 22:18:37
21
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人