自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 day20 最大二叉树,合并二叉树,二叉搜索树

if not root1: return root2和if not root2: return root1很妙,就涵盖了3种情况了。if self.maxVal < root.val很牛的思路,这样左边能找到最大值,右边能找到最小值。凡是构造二叉树类,都用前序。终止条件是:数组长度为1,说明已到叶子节点。BST的特点是根节点的值比左边大,比右边小。98 验证二叉搜索树。

2024-04-19 11:40:45 84

原创 day18二叉树:找左下角的值,路径总和,中后/中前序遍历构造二叉树

我有时候会有像depth、sum这些值怎么传进去的问题,关于这道题的depth是在函数里面的形参,在findBottomLeftValue里面初始化一个self.max_depth为float('-inf'). 然后去更新这个self.max_depth。这道题卡哥的巧妙设计之处在于用count去做减减,如果最终在叶子节点count为0,那么就返回True,如果在叶子节点count不为0,就False。根据之前做的题,一般在主函数里面如果root为空的话就会返回False,但这只是一种情况。

2024-04-15 05:54:42 151 1

原创 day17 平衡二叉树,所有路径,左叶子之和

遍历时:if node.left!= None & node.left.left == None & node.left.right == None,这说明此时node.left就是一个左孩子。有趣之处在于返回True和False的条件的设置。代码的设计十分的精妙,当不等于-1时返回True,等于-1时返回False。设计终止条件2:node.left is None and node.right is None --> 0.回溯在于pop,把叶子节点的元素弹出,方便遍历右边/左边的元素。

2024-04-10 03:02:40 148 1

原创 day 16 二叉树03:目前都只学了递归

以我目前的能力,我能理解的是在计算深度,个数这种,需要由子节点向根节点返回信息的题目,都用后序,用后序我就能理解。二叉树最大深度,二叉树最小深度,完全二叉树节点个数。深度的意思是,从根节点开始为1,往下一层为2。result中,这里的中体现在+1。

2024-04-08 05:59:28 111 1

原创 day 15 二叉树02

用deque来模拟队列,从这道题通过代码调试我真正清楚了二叉树具体的数据结构,比如root是一大坨、所有的数据,root.left,root.right是左右子树,root.val,是根节点的数值。result存放总的结果,level存放每一层的结果。用popleft来弹出队列口的元素。需要考虑的情况:左空右不空,左不空右空,左右都空,左右都不空:比较值是否相等。用后序,什么情况需要后序遍历:需要收集孩子节点信息并且要返回给上一层的时候。我是第一遍学习二叉树,所以目前我就只学了递归法,迭代法我先放置了。

2024-04-05 05:00:58 176 1

原创 day14 二叉树01:递归遍历

之前学别的语言的时候看见迭代头就很大,今天仔细学了下,当root为空的时候就return [ ], 这个地方的return就等于回到上一层方法去了。最后return的时候按照遍历顺序来组装这个数据结构。这三种遍历的方法都是深度优先搜索的方法,我先学了遍历,迭代部分等我把二叉树学熟了再回来学。入门二叉树的第一天,学习了前序,中序和后序排列。

2024-04-04 06:44:47 171 1

原创 day13 队列:滑动窗口最大值,top k

说实话我现在还是懵的。笔记里面的滑动getMaxValue的方法真的很nb,始终让最大值处在队列口,自己来实现单调队列的方法。239 滑动窗口最大值。

2024-04-03 09:46:54 303 1

原创 day11 栈与队列:有效括号,删除相邻重复,逆波兰

按照卡哥的思路就可以把代码写出来了,刚开始我是在colab里面写的,发现能跑case,然后换到leetcode就不行了。最后leetcode切换到python3,就可以了。以后都用python3来做题。有效括号和删除相邻重复项都是同一个类型的题,用list来模拟栈,然后放进去,再通过比对顶部元素来看是否需要弹出。这里因为我们是用list来模拟的栈,所以获取顶部元素的方法是:list[-1]查看最后一个加进来的元素。

2024-04-02 02:32:28 100 1

原创 day10 栈与队列

在225用队列实现栈用到的是:popleft().这里deque的popleft指的是从左弹出队列,pop是从右弹出队列。这里,top指的是返回栈顶第一个数。python是用list来模仿栈的,用deque()来模仿队列的。在232用栈实现队列里面用到的是:pop,append。队列是FIFO,栈是LIFO。

2024-04-01 10:36:42 104 1

原创 day9 字符串02 kmp

之前是学不懂,现在能学懂next数组的意思了,但是看代码实现还是一脸懵。strStr我是用暴力做的。

2024-04-01 06:42:32 105 1

原创 day 8 字符串1

关于这道题卡哥的思路特别的好:把字符串一分为二,各自旋转,然后重新拼接。我写完了之后发现python其实可以直接拼接就好...又冗余了。看到正确答案的时候我很震惊。但毕竟我基础不好,又平复心情了。这道题我是自己做的!由于我自己不知道strip函数,所以我写得很冗长,我的空间复杂度是o(n),这不友好。我的代码思路是用ord,但后来看了卡哥的,我又学到了!本质是反转前k个,知道了这个就用切片就好了。用.isdigit()来判断是否是数字。151翻转字符串里的单词。

2024-03-31 09:17:08 129 1

原创 day7 哈希表2

在不知道数据长短的情况下不适合用数组,用字典:my_dict.get(n1+n2,0);my_dict.get(n1+n2)返回boolean。四数:a+b+c+d=target:if i >0 and nums[i]==nums[i-1]: continue。三数:a+b+c=0.去重要注意是a和b,b和c去重。和有效字母异位词是一样的题。三数和四数之和的核心:双指针+去重。这道题我能完全独立自主的做嘿嘿。

2024-03-30 05:14:54 121 1

原创 day 6 哈希表:判断一个元素是否出现在集合里

对于数字:for i in range(len(nums)), count[nums[i]] +=1 ,这样,nums[i]是多少,就在count的第多少索引加一。有两种方法:循环+divmod(n,10)。还有一种是for i in str(n),在后续运算的时候再int(i)用ascii码把字母转换成数字,映射到数组里面。“映射到数组”的意思是把字符映射到哈希表的索引下标上。可以用字典,也可以用集合。遍历数组,for key, value in enumerate(nums)349 两个数组的交集。

2024-03-29 06:37:15 185 1

原创 day 4 链表:两两交换,移除倒数第n个,

明白这个点的时候我才加深了对于双指针在这里使用的奥义。数学推理:重点在于慢指针每次走一步,快指针每次走2步。如果走三步,会这样:当n为奇数的时候,右半部分不是一个非负整数,但x是一个非负整数,所以会不满足条件。当n=1时,x=z,这个巧妙的发现可以直接令一个index从head再开始。在于A组和B组的比较对象是指针,而不是数值。其中在计算出A和B的长度之后有一段是如果lenA>lenB就互换的,是为了保证后面的代码能够顺利运行。再让慢指针开走,此时快指针也开始走。我写了一个指针这个版本的答案在图二。

2024-03-25 12:13:55 225

原创 day3 链表:移除,设计,翻转

这道题在学懂了逻辑的基础上对于我来说更多的是对实例方法的熟练运用。实例方法在除了__init__以外的有self的都是实例方法。这种方法在写的时候涉及到了属性的更改的东西,前面都要加 self.我以前没有在写代码的过程中使用面向对象的内容,所以我对于class这些不是很熟悉。通过这道题和设计链表我熟悉了很多。这道题有点像3个指针。重点在于先后顺序,要保证各个位置链接过去的时候要有数据存在。dummy_head = ListNode(next=head),在头节点前面设置一个节点。

2024-03-24 12:02:24 116 1

原创 day2 滑动窗口、暴力法、循环不变量

在暴力法的时候,第一遍写我忽略了0如果在中间的情况。python可以直接用sort()的,很方便。快慢指针 注意先设一个min_len=float('Inf')看起来很难难,看了卡哥的视频讲解之后我也能上手实现了!977 有序数组的平方。209 长度最小子数组。

2024-03-22 12:06:29 106 1

原创 day1 二分查找&双指针

左闭右闭的时候:while left <= size。此时的left 是mid+1,right是mid-1.左闭右开的时候:while left < size. 此时left是mid+1,right是mid。暴力法:while+for,每发现一个val,就让后面整体前移,时间复杂度O(n^2)双指针法:快慢指针,slow来收集个数O(n)leetcode 704二分查找。这两种方法空间复杂度都是O(1)leetcode 27移除元素。

2024-03-21 01:04:13 67

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除