摘要:LeetCode236 二叉树的最近公共祖先 dfs二叉树,记录以当前节点为根节点的子树是否包含p节点或q节点 记录第一次满足条件的节点即为所求最近公共祖先 判断条件为:1. 左右子树分别含有p节点和q节点;2. 当前节点为p节点或q节点,另一节点在左子树或右子树中. # Definition fo
阅读全文
摘要:LeetCode103 二叉树的锯齿形层序遍历 使用两个栈进行模拟 + bfs # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # s
阅读全文
摘要:LeetCode33 搜索旋转排序数组 二分数列,仅仅当对于当前处理部分nums[l] < target < nums[r]时,进行答案更新,否则在另一部分寻找答案 class Solution: def search(self, nums: List[int], target: int) -> i
阅读全文
摘要:LeetCode386 字典序排数 构造字典树,dfs遍历记录 class Solution: def lexicalOrder(self, n: int) -> List[int]: ans = [] def dfs(cur): if cur <= n: ans.append(cur) else:
阅读全文
摘要:LeetCode287 寻找重复数 快慢指针寻找环入口 关于判定有环之后如果寻找环入口可参考 参考 class Solution: def findDuplicate(self, nums: List[int]) -> int: slow, fast = nums[0], nums[nums[0]]
阅读全文
摘要:LeetCode846 一手顺子 哈希算法,count字典记录每个元素出现个数,然后按顺子规则逐个消减,判定是否符合 class Solution: def isNStraightHand(self, hand: List[int], groupSize: int) -> bool: count,
阅读全文
摘要:LeetCode面试题 04.06. 后继者 求中序遍历中给定节点的后一个节点,分右子树中/父节点中 # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # se
阅读全文
摘要:LeetCode337 打家劫舍 III 与LeetCode198 打家劫舍一致,将数列换为树形结构 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right
阅读全文
摘要:LeetCode199 二叉树的右视图 bfs记录每层最后一位被遍历的节点值 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # se
阅读全文
摘要:LeetCode99 恢复二叉搜索树 Morris中序遍历 + 记录逆序对 Morris遍历 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=Non
阅读全文
摘要:二叉树节点定义 class Node(): def __init__(self, val): self.val = val self.left = None self.right = None 递归遍历 递归实现前中后序遍历 class Traverse(): def preorder_traver
阅读全文
摘要:LeetCode887 鸡蛋掉落 考虑使用 $k$ 个鸡蛋,计算进行 $t$ 次操作可以测试的最高楼层数,记作 $dp[t][k]$ 最小的 $t$ 使得 $dp[t][k] \ge n$ 即为最终答案 转移状态分鸡蛋碎了和没有碎 $dp[t][k] = 1 + dp[t-1][k] + dp[t-
阅读全文
摘要:LeetCode46 全排列 递归求解 class Solution: def permute(self, nums: List[int]) -> List[List[int]]: ans, l = [], len(nums) def dfs(cur): if cur == l - 1: ans.a
阅读全文
摘要:LeetCode714 买卖股票的最佳时机含手续费 $dp[i]$ 表示第 $i$ 天结束之后所获得的最大收益 $dp[i][0]$ 表示第 $i$ 天结束之后手中持有一张股票,该股票来源包括今天购买和昨天就持有 $dp[i][1]$ 表示第 $i$ 天结束之后手中没有股票,即昨天也没有或今天卖出
阅读全文
摘要:LeetCode309 最佳买卖股票时机含冷冻期 $dp[i]$ 表示第 $i$ 天结束之后所获得的最大收益 $dp[i][0]$ 表示第 $i$ 天结束之后手中持有一张股票,该股票来源包括今天购买和昨天就持有 $dp[i][1]$ 表示第 $i$ 天结束之后手中没有股票,且处于冷冻期,即今天卖出手
阅读全文
摘要:LeetCode42 接雨水 维护一个单调栈,单调栈存储的是下标,满足从栈底到栈顶的下标对应的数组 height 中的元素递减 每次遇到大于栈顶元素的值时进行答案累计 class Solution: def trap(self, height: List[int]) -> int: ans, sta
阅读全文
摘要:LeetCode213 打家劫舍 II 考虑环形,首位不能同时选择 则分别对 $[0, len - 2]$ 和 $[1, len - 1]$ 做LeetCode198 打家劫舍 class Solution: def rob(self, nums: List[int]) -> int: def so
阅读全文
摘要:LeetCode198 打家劫舍 $dp[i]$ 表示前 $i$ 个房间带来的收益,这里不一定要选择第 $i$ 个房间 class Solution: def rob(self, nums: List[int]) -> int: l = len(nums) if l == 0: return 0 i
阅读全文
摘要:LeetCode357 统计各位数字都不同的数字个数 注意0的位置,分不同位数单独计算 class Solution: def countNumbersWithUniqueDigits(self, n: int) -> int: if n == 0: return 1 if n == 1: retu
阅读全文
摘要:LeetCode319 灯泡开关 等价于求小于等于n的平方数的个数 class Solution: def bulbSwitch(self, n: int) -> int: if n == 0: return 0 i, ans = 1, 0 while i * i <= n: ans, i = an
阅读全文