Leetcode刷题10.19——盛水最多的容器 & 相同的树

leetcode 11 盛水最多的容器

  *输入为一个数组,输出为最大容量的值

  思路是,双指针法,一个从最左开始遍历,一个最右往回遍历,直到两指针相遇。每次移动的依据是要移动高度小的那个位置的指针(这样才能保证以后有可能遇到更大的容量)

  代码如下:

class Solution:
    def maxArea(self, height: List[int]) -> int:
        if len(height) <= 2:
            return min(height)
        left = 0
        right = len(height)-1
        A = (len(height)-1) * min(height[left], height[right])
        while left < right:
            if left < right and height[left] <= height[right]:  #一定要注意别忘了“=”号,忘记这个有些用例会陷入死循环
                left += 1
            elif left < right and height[left] > height[right]:
                right -= 1
            A = max(A, min(height[left],height[right]) * (right - left))
        return A 

leetcode 100 相同的树

   思路是DFS深度优先遍历,递归。需要注意是终止条件分为哪些情况:

  • 什么情况下判断到终点,两个节点相等——没有子树时
  • 什么情况下可以提前结束遍历——两个节点一个存在一个不存在,或两个节点连值都不相等时
  • 此外还需注意三个终止条件判断的顺序——先判断完存在,再判断值,最后else里是中间情况,即需要左右子树同时相等才是符合要求的
class Solution:
    def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
        if not p and not q:
            return True
        elif not p or not q:
            return False
        elif p.val != q.val:
            return False
        else:
            return self.isSameTree(p.right,q.right) and self.isSameTree(p.left, q.left)

 

posted @ 2020-10-20 21:34  爱吃虾的小暹罗  阅读(71)  评论(0编辑  收藏  举报