- 博客(38)
- 收藏
- 关注
原创 leetcode 34. 在排序数组中查找元素的第一个和最后一个位置
二分查找的题目,使用二分查找去卡target最左边的区间,右边区间可以使用target+1去卡;
2025-07-29 22:06:01
170
原创 leetcode 74. 搜索二维矩阵
根据矩阵的特点,不需要把矩阵拉成一维,二维转成一维映射关系为a[i]=matrix[⌊i//n⌋][i%n];然后开始二分查找,一直二分的收缩区间;
2025-07-29 21:11:38
333
原创 leetcode 131. 分割回文串
DFS配合for循环,枚举子串结束位置,如果是子串,就以下一个位置为起点,递归下去,直到i==n,还要有恢复现场的操作;
2025-07-28 23:13:16
126
原创 leetcode 438. 找到字符串中所有字母异位词
滑动窗口大小为len(p),每次判断是否异位词相等,每次都会left的数量--,为零的话要删除键;
2025-07-28 14:48:10
91
原创 leetcode 42. 接雨水
听过说是大厂面试coding考的比较多的题,双指针,左右夹击,每一步都要求最大值,左或右(左右也要判一下谁最大)的最大值和当前的差值就是当前能接到的雨水;
2025-07-21 15:39:00
137
原创 面试真题 找包围的O
思路:边界O肯定不是被包围的,所以DFS找到所有与边界O相邻的位置把他们做标记,未被标记的O替换成X,最后输出。某东coding题目。
2025-07-16 18:24:07
123
原创 leetcode 128. 最长连续序列
思路:首先使用set()保证元素唯一,然后找到数字的起点,下面就是每次增一找到终点,不断更新最后最大长度。题意为找到最长的数字连续序列的长度。
2025-07-16 16:01:08
180
原创 leetcode 46. 全排列
总结搜索的方法:按顺序枚举每一位可能出现的情况,已经选择的数字在 当前 要选择的数字中不能出现。这样的思路,可以用一个树形结构表示。我们尝试在纸上写 3 个数字、4 个数字、5 个数字的全排列,相信不难找到这样的方法。以数组 [1, 2, 3] 的全排列为例。最后写以 3 开头的全排列,它们是:[3, 1, 2], [3, 2, 1],即 3 + [1, 2] 的全排列。再写以 2 开头的全排列,它们是:[2, 1, 3], [2, 3, 1],即 2 + [1, 3] 的全排列;
2025-07-15 22:03:25
409
原创 leetcode 994. 腐烂的橘子
每次用被感染的橘子去污染后面的橘子,如果当前还有新鲜橘子上一轮没有感染橘子,那么感染所有橘子就是不可能。模拟广度优先搜索的过程。
2025-07-15 20:29:12
254
原创 leetcode 236. 二叉树的最近公共祖先
写在底下的就是回溯,因为下面的是左右子树都遍历完了进行的return,那不就是回溯嘛!求二叉树的最近公共祖先,思路如下图,很妙。
2025-07-14 15:58:14
217
原创 leetcode 437. 路径总和 III
思路:可以通过暴力枚举起点和终点来得到序列的值,这样时间复杂度比较高;我们可以使用一个数组来存每个元素的前缀值,这样只需要枚举终点即可,每次记数是cnt[s-targetSum]个数,初始化时cnt[0]=1;这道题和560. 和为 K 的子数组这题是一样的,都是求子序列的值为targetSum的个数。注:这道题有回溯恢复状态的代码。
2025-07-11 18:03:10
231
原创 leetcode 105. 从前序与中序遍历序列构造二叉树
3.之后的根节点可以通过计算得到,后面依然是划分子树,后面的问题是一样了,用递归解决,先序里的元素在中序里的位置,可以通过字典dic去映射。2.拿到根节点,在中序序列里可以划分出左右子树。之后right的根为i-left+root+1。1.先序第一元素可以确定根节点。之后left的根为root+1。
2025-07-11 16:16:21
239
原创 leetcode 199. 二叉树的右视图
extend(iterable),将一个可迭代对象中的数据按顺序添加到队列的尾部。这里要注意,字符串也是可迭代对象,如直接添加字符串'ABC',会将'A'、'B'、'C'添加到队列中,因为'ABC'会被当成一个可迭代对象进行迭代,要将'ABC'作为一个整体的字符串添加可以将其放到列表中,添加['ABC']才会符合预期。append(item),添加一个数据到队列的尾部。extendleft(iterable),将一个可迭代对象中的数据按顺序添加到队列的头部。pop(),将队列尾部的数据弹出,并作为返回值。
2025-07-11 14:18:43
214
原创 leetcode 230. 二叉搜索树中第 K 小的元素
二叉搜索树的特点是当前节点大于所有左子树的节点,当前节点小鱼所有右子树的节点;由于二叉搜索树的特点,它进行中序遍历时,得到的序列就是升序的。
2025-07-10 18:19:06
127
原创 leetcode 116. 填充每个节点的下一个右侧节点指针
方法二:DFS,对于二叉树的递归问题,三层就是完整的子问题,其余都是一样的问题,最还要考虑返回值,每一层的返回值;这个算是理解进阶递归问题比较好的模版了;方法一:BFS,双端队列实现,deque不但可以使用popleft方法,它还是使用下标获取元素;铁厂面试coding。
2025-07-10 16:32:22
256
1
原创 leetcode 152. 乘积最大子数组
经典的动态规划问题,dp问题就是要找状态,因为序列里有负数,所以当前最大值可能是之前状态的最小值乘上当前值,当前的状态为dp[i]=max(pre_max*nums[i], pre_min*nums[i], nums[i])。好像是某大厂的编程题。
2025-07-09 10:49:05
106
原创 leetcode 101. 对称二叉树
递归就是拆解子问题,要把子问题的所有情况都列举出来;下面的代码是判断二叉树是否对称,子问题是,1.如果一个节点那肯定是对称的,2.当前节点有左子树或右子树,那肯定不是对称的,3.当前节点左右子树都有,且左右节点的值相等,那就是当前状态是对称的;剩下就是递归判断左的左和右的右和左的右和右的左也是对称的,直到递归完所有节点都满足条件就能判断树的对称的,否则就不是对称的。
2025-07-08 23:04:15
167
原创 leetcode 226. 翻转二叉树
很经典的问题,翻转二叉树中的左右节点,tmp存root.left,递归的进行左右节点交换,最后是返回当前的节点。
2025-07-08 22:43:31
71
原创 leetcode 238.除自身以外数组的乘积
思路:两趟循环即可搞定,第一趟算每个位置在它之前的乘积,第二趟算每个位置在它之后的乘积。时间复杂度O(n)。
2025-07-03 14:55:07
92
原创 python websocket客户端
在本例中,WebSocketClient类被修改为包含一个标志(is_heartbeat_failed),如果心跳失败,该标志将被设置为True。send_heartbeat方法在发送一个心跳消息后检查这个标志。如果设置了该标志,则表示心跳失败,客户端将尝试重新连接。本程序具有websocket的基本功能,其中另外加了心跳,心跳失败重连。
2023-09-28 15:09:35
554
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅