1. 程式人生 > 實用技巧 >Leetcode刷題10.19——盛水最多的容器 & 相同的樹

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)