摘要:
题目链接 解题思路:二叉树递归套路。从左儿子收集信息,从右儿子收集信息,然后得到本节点的信息,再返回给自己的父亲节点。 从儿子收集什么信息? 左儿子是否包含p?左儿子是否包含q?右儿子是否包含p?右儿子是否包含q 任意一个儿子包含p,那么本节点就包含p,任意一个儿子包含q,那么本节点就包含q 如果该 阅读全文
摘要:
题目链接 解题思路:二叉搜索树,中序遍历,就是有序的,就可以依次得到第K小的数了 代码 class Solution: # 中序遍历 就是从小到大遍历 def kthSmallest(self, root: Optional[TreeNode], k: int) -> int: stack = [] 阅读全文
摘要:
题目链接 解题思路:使用set,遍历数组,如果数组中存在该数,则直接返回True,否则加入set 代码 class Solution: def containsDuplicate(self, nums: List[int]) -> bool: has = set() for num in nums: 阅读全文
摘要:
题目链接 解题思路:使用优先级队列,大小是K,小根堆。遍历数组,当前数为num,如果num小于堆顶,那么num不可能是结果,如果num大于堆顶,那么就把堆顶元素弹出去,同时把num放入优先级队列,依次遍历完数组,堆顶元素就是答案。 为什么正确? 因为优先级队列保持着【当前最大的k个元素】,而堆顶则是 阅读全文
摘要:
题目链接 解题思路:来到index位置,决定偷,或者不偷。但是有一个问题,来到最后一个位置的时候,可以偷吗?因为房屋是一个圆圈,如果第一个位置偷了,那么最后一个位置就不能偷,那么暴力递归时,怎么知道呢? 将问题解耦成两个问题,第一个房间偷+第一个房间不偷。第一个房间偷,那么最后一个房间必不能偷;第一 阅读全文