總結
- 移動零 一前一後。前面的遍歷陣列,後面的維護條件,後指標對值的修改不會影響前指標的遍歷。
- 盛最多水的容器 一左一右。每次移動一個指標計算當前結果。
- 三數之和 一左一右。需要考慮的點:如何去重。
- 接雨水 對雙指標缺乏練習,還沒想到如何同時維護當前位置左右兩邊最高的點,擱置一週,只能用單調棧做出來,附程式碼。
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