0x03 Leetcode Hot100 雙指標

L1xxer發表於2024-11-25

總結

  • 移動零 一前一後。前面的遍歷陣列,後面的維護條件,後指標對值的修改不會影響前指標的遍歷。
  • 盛最多水的容器 一左一右。每次移動一個指標計算當前結果。
  • 三數之和 一左一右。需要考慮的點:如何去重。
  • 接雨水 對雙指標缺乏練習,還沒想到如何同時維護當前位置左右兩邊最高的點,擱置一週,只能用單調棧做出來,附程式碼。
class Solution:
    def trap(self, height: List[int]) -> int:
        stack = []
        ret = 0
        for i in range(len(height)):
            while stack and height[i] > stack[-1][1]:
                pre = stack.pop()
                if not stack:
                    break
                a = i - stack[-1][0] - 1
                b = min(height[i], stack[-1][1]) - pre[1]
                ret += a * b
            stack.append((i, height[i])) 
        return ret

相關文章