- 博客(14)
- 收藏
- 关注
原创 python蓝桥杯备赛(day15)二叉树part03
节点数计算就是直接遍历,treeNum = leftNum(左边从下往上数的数量) + rightNum(右边从下往上数的数量) + 1(遍历到的节点,所以加上1)的特性,整体就是如果整个树不是满二叉树,就递归其左右孩子,直到遇到满二叉树为止,用公式计算这个子树(满二叉树)的节点数量。要点:与算最大深度相似,但是要考虑根节点的左枝或右枝为null的情况,而不能只是将上面的max改为min。104.二叉树的最大深度 559.n叉树的最大深度。104.二叉树的最大深度 559.n叉树的最大深度。
2025-02-23 00:01:11
704
原创 python蓝桥杯备赛(day14)二叉树02层序遍历
思路要点:需要用两层循环,内层用来控制获取节点的值并填入leve中,外层用来控制每一层的level加入result。第六章 二叉树 part02。
2025-02-16 23:11:54
262
原创 python蓝桥杯备赛(day13)二叉树01
其实卡尔老师的视频讲解的并不够好,只讲了怎么做,没讲为什么(底层逻辑),这让对递归不清楚的人在理解上会有困难,建议根据代码在图上推导帮助理解。
2025-02-14 16:52:12
202
原创 python蓝桥杯备赛(day12)栈与队列03
在主类中有两个指针,一个是k的开头,一个是k的结尾。有而在三个模块中的pop(),如果遍历的数字(k的开头)是最大的(deque的左边第一个元素),则弹出,否则不管;push(),如果遍历的数字(k的结尾)比deque右侧的元素大,则让deque左侧的元素弹出,达到形成递减的队列的目的。思路要点:要知道python中的小顶堆怎么实现,import heapq,heapq.heappop(列表)弹出,heapq.heappush(列表,元素)推进;然后是保持小顶堆中只有k个元素(里面是k个频率最大的数)
2025-02-13 22:50:38
272
原创 python蓝桥杯备赛(day10)栈与队列02
->用栈来储存向右的括号的反括号,在遇到反括号时一一对应消除,若最后栈不为空或者还未遍历完字符串栈就空了或反括号不对应栈里的反括号,都是不符合题意的。:将数字存入stack中,遇到操作符时,就取出栈顶头两个数字进行计算,注意向零取整不能用//(向下取整),应该int(num/num)取整。思路要点:类似上一题,这种有对称关系的匹配消除问题都可以用尝试栈来解决。● 1047. 删除字符串中的所有相邻重复项。1047. 删除字符串中的所有相邻重复项。● 150. 逆波兰表达式求值。● 20. 有效的括号。
2025-02-11 23:03:12
235
原创 python蓝桥杯备赛(day9)栈与队列
理解栈顶是哪里,python中用deque(双端队列)来模拟que(队列),append()进队列,popleft出队列,只用一个队列即可模拟出栈。:理解队列头尾以及进出队列的方法,python中用list()来模拟栈,该题用两个站来模拟队列。225. 用队列实现栈。225. 用队列实现栈。232.用栈实现队列。232.用栈实现队列。
2025-02-05 11:35:00
330
原创 python蓝桥杯备赛(day8)[KMP算法]
这题要用kmp算法,一下是我认为搞清楚kmp需要知道的。前缀表里重新开始匹配的位置是怎么找的(文章里有)第四章 字符串part02 [KMP算法]所以前缀表具有告诉我们当前位置匹配失败,28. 实现 strStr()最长相同前后缀(文章有)
2025-01-27 22:45:20
359
原创 python蓝桥杯备赛(day7)
反转可以直接用[::-1],列表可以直接“+”拼接:s = s[:p]+s[p:p+k][::-1]+s[p+k:]来保证只对s[p]到s[p+k-1]反转,其他部分不变。:python里字符串无法修改,故不用视频里的原地修改,先split(),分割只剩不含空格的单词,然后【::-1】反转,然后” “.join链接即可。:因为python中string无法修改,所以只能用额外的字符串,遍历s,用isdigit()判断是否为数字即可。151.翻转字符串里的单词。151.翻转字符串里的单词。
2025-01-24 23:09:25
450
原创 python蓝桥杯备赛(day6)
用双指针,主要考虑去重问题,前提是数组已经排好序了,当i与i-1相同时,得到的元组一定是重复的,所以直接continue;对left,right,当得到一个符合题意的元组时,就要考虑当前的left,right与其下一个/上一个是否相同,相同则right-=1,left+=1直至不相同。:正常暴力时间复杂度为n的四次方,所以要将num1+num2为一组,num3+num4为一组遍历他们的两个元素和,时间复杂度为n方;,和为key,出现次数为val;:思路大体与三数之和一致,但是在去重和剪枝方面要注意不同点。
2025-01-24 12:19:27
684
原创 python蓝桥杯备赛(day5)
死循环意味着new_num会重复,用set哈希表(record)存储每一个new_num,再用while n not in record :来实现new_num不是会出现相同的(死循环),若出现相同的(死循环),则结束循环返回False。用哈希表,以0到25作为数组索引,遍历s和t里面的每个字母为i,设置ord(i)-ord("a")为索引,s里有的加一,t里有的减一。:其实是与有效的字母异位词思路基本一致,在最后判断时,只要让record里的数<=0,则说明在ransomNote里的字符都在。
2025-01-22 11:55:49
328
原创 python蓝桥杯备赛(day4)
要操作两个节点交换,就要让current处于这两个节点的前面;判断是否有环->设置快慢针,若没有则循环到fast,fast.next为None,若有环,则求出相遇点,根据公式,头节点的起始点与相遇点到环的起始点距离相等,所以以此求环起始点。快慢针一开始都在dummy_head,快针先向前走n+1步,然后再同时移动快慢针,直到快针指向最后一个节点,此时,慢针刚好指向倒数第n个节点的前一个。一种是因为如果有相交的节点,那么一定是在短链表的第一个节点开始,因此要让curA,curB先对齐,再往后移动。
2025-01-21 14:51:58
404
原创 python蓝桥杯备赛(day3)
203. 移除链表元素 - 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。可以用双指针法(pre,current)只用将链表的指向反转即cur.next=pre。做法:虚拟头节点来统一操作或者直接移除但是分是否为头节点。203. 移除链表元素 - 力扣(LeetCode)注意设置size的变化和current的位置。
2025-01-19 15:59:42
1573
原创 蓝桥杯python算法备赛(第二天)
nums = [[0] * n for _ in range(n)] -------- 多维矩阵生成。掌握了: 生成特定长度列表的方法,正无穷初始化。今天学习了数组内容里的。
2025-01-15 23:17:57
263
原创 蓝桥杯Python算法备赛(第一天)
看完代码随想录总结:掌握了元素移除的双指针(快慢针)的原理,对于函数库使用与否的判断,以及元素移除中暴力解法。困难:在用暴力解法时,忘记对替换的新元素进行重新判断,第二个for循环忘记对遍历范围l进行调整。看完代码随想录总结:掌握了二分法前提条件以及左闭右闭,左闭右开两种二分法的写法以及原理逻辑。实现过程的困难:理解左闭右闭,左闭右开的逻辑区别上用了很多时间。看到题目第一想法:已经大概有思路。看到题目第一想法:不i知道怎么做。今天天学习了数组内容中的。
2025-01-14 23:21:48
182
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅