- 博客(20)
- 收藏
- 关注
原创 LeetCode T238. 除自身以外数组的乘积
如果知道了i左边所有数的乘积,以及i右边所有数的乘积,就可以算出answer[i]。先计算 suf,然后一边计算 pre,一边把 pre直接乘到 suf[i]中。
2024-06-12 14:20:32
290
原创 LeetCode T208. 实现 Trie (前缀树)
Trie 的每个节点存储了对其子节点的链接(通常是数组或哈希表),每个节点代表一个字符。根节点不包含字符,除根节点外的每个节点都与一个字符相关联。除此之外,节点通常还包含一个标志,表示该节点是否是某个字符串的结束。
2024-05-30 10:02:53
217
原创 LeetCode T221. 最大正方形
在这个数字中,连续的 1 就可以看作是正方形的宽,而高度就是 2,因为是 2 个数相与的。要得到正方形,宽和高必须相等,那么就是取宽高中较小的那个作为正方形的边,所以能构成的最大正方形边长为 min(宽,高)=min(1,2)=1。举个例子:对于数字 10101010,将这个数和它左移一位后的数相与,操作1次,这个数就变成 0 了,连续最多的 1只有 1 个;连续的 1 有 3 个,所以宽是 3,高仍然是 2,构成的最大正方形边长为 min(宽,高)=min(3,2)=2。方法二:动态规划思路。
2024-05-29 10:26:58
281
原创 LeetCode T226. 翻转二叉树
利用栈(或队列)遍历树的所有节点node,并交换每个node的左 / 右子节点。递归遍历(dfs)二叉树,交换每个节点的左 / 右子节点。方法二:辅助栈(或队列)
2024-05-28 10:34:00
238
原创 LeetCode T62.不同路径
运用动态规划的思想,当start在m为1或n为1的图形中,只有一种路径。当m,n均不为1时,路径数等于m-1*n加m*n-1的路径之和。为了方便计数,将m*n的矩阵翻转,让每一个格子的位数等于其左边和上边的位数之和。即dp[i][j]=dp[i-1][j]+dp[i][j-1]。
2024-04-25 08:38:25
186
1
原创 LeetCode T56.合并区间
先将原数组按照所有区间的左端点进行排序,遍历数组,比较index和index+1,当有重叠情况时,我们把合并后的数组放在index位置,删除index+1位置。如果没有重叠,index=index+1。直至遍历完,返回该数组。重叠与不重叠的情况共有三种:(已经排过序,intervals[index][0] [1,4]例子:[1,4] [2,3]->[1,4]例子:[1,2] [3,4]
2024-04-25 08:36:56
418
1
原创 LeetCode T48.旋转图像
先将矩阵沿主对角线翻转,如 [[1,2,3],[4,5,6],[7,8,9]] 翻转成 [[1,4,7],[2,5,8],[3,6,9]],再左右翻转,如 [[1,4,7],[2,5,8],[3,6,9]] 翻转成 [[7,4,1],[8,5,2],[9,6,3]]。将矩阵竖着解构,如 [[1,2,3],[4,5,6],[7,8,9]] 解构成 [[1,4,7],[2,5,8],[3,6,9]],将每个部分逆序即可。
2024-04-21 15:05:43
463
1
原创 LeetCode T46. 全排列
如果输入列表只包含一个元素,则返回一个包含该单个元素的列表。这是递归算法的基本条件,它确保算法终止并返回正确的结果。我们尝试在纸上写 3 个数字、4 个数字、5 个数字的全排列,相信不难找到这样的方法。来生成剩余部分的所有排列,然后将当前元素附加到每个排列中,形成新的排列。这是通过将当前元素之前和之后的部分连接而得到的。下面是算法的核心部分,用于生成所有可能的排列。总结搜索的方法:按顺序枚举每一位可能出现的情况,已经选择的数字在。最后,一旦所有可能的排列都已生成,我们返回包含所有排列的列表。
2024-04-21 15:03:59
365
1
原创 LeetCode T49.字母异位词分组
注意到,如果把 aab,aba,baa按照字母从小到大排序,我们可以得到同一个字符串 aab。而对于每种字母出现次数不同于 aab的字符串,例如 abb和 bab,排序后为 abb,不等于 aab。所以当且仅当两个字符串排序后一样,这两个字符串才能分到同一组。根据这一点,我们可以用哈希表来分组,把排序后的字符串当作 key,原字符串组成的列表(即答案)当作 value。最后把所有 value 加到一个列表中返回。
2024-04-21 12:52:36
349
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅