题目描述:
题解:
1.找出height中height最大的位置highest_idx。
2.从左开始向hightest_idx搜索,同时维护一个左边最高值left_highest,搜索过程中,如果height[i]>left_highest,则将left_highest更新为height[i],如果当前height[i]小于left_highest,则容量加left_highest-height[i]
3. 从右开始向hightest_idx搜索,同时维护一个右边最高值right_highest,搜索过程中,如果height[j]>right_highest,则将right_highest更新为height[j],如果当前height[j]小于right_highest,则容量加right_highest-height[j]
以第一组输入为例:
[0,1,0,2,1,0,1,3,2,1,2,1]
最高height=3,idx=7
从左边开始,left_highest初始化为0,i=1时,left_highest更新为1,i=2,容量加1,i=3,left_highest更新为2,i=4,容量+1,i=5,容量+2,i=5,容量+1。
class Solution: def trap(self, height: List[int]) -> int: highest = max(height) highest_idx = height.index(highest) left_highest = height[0] contain = 0 for i in range(highest_idx): if height[i]>left_highest: left_highest = height[i] if height[i]<left_highest: contain = contain+(left_highest-height[i]) right_highest = 0 for j in range(len(height)-1,highest_idx,-1): if height[j]>right_highest: right_highest = height[j] if height[j]<right_highest: contain = contain+right_highest-height[j] return contain