4874python
86bash
Favoriteapp
Share Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.ui
The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped. Thanks Marcos for contributing this image!this
Example:spa
Input: [0,1,0,2,1,0,1,3,2,1,2,1] Output: 6code
类型:Arrayleetcode
思路: 1.countNumber=0 l,r比较,设置标杆值com=min(list[l],list[r]),从小的一端开始遍历 2.好比从左开始遍历, list[l+1]<=com,counNumber添加com-list[l+1], list[l+1]>com,窗口缩小为(l+1,r),重置标杆值com,迭代get
代码:python3string
class Solution:
def trap(self, height):
if len(height)<=2:return 0
countArea=0
l,r=0,len(height)-1
current=0
startOrEnd=(height[l]<height[r])#true start
print(startOrEnd)
biaoganzhi=0
if startOrEnd:
biaoganzhi=height[l]
else:
biaoganzhi=height[r]
print(biaoganzhi)
#标志值
while l<r:
if startOrEnd:
#从min开始遍历
if height[l+1]>biaoganzhi:
print("换一边l")
#换一边
l=l+1
startOrEnd=(height[l]<height[r])#true start
print(startOrEnd)
if startOrEnd:
biaoganzhi=height[l]
else:
biaoganzhi=height[r]
continue
else:
print(countArea)
l=l+1
countArea=countArea+biaoganzhi-height[l]
print(countArea)
else:
#从min开始遍历
if height[r-1]>biaoganzhi:
print("换一边r")
#换一边
r=r-1
startOrEnd=(height[l]<height[r])#true start
print(startOrEnd)
if startOrEnd:
biaoganzhi=height[l]
else:
biaoganzhi=height[r]
continue
else:
print(countArea)
r=r-1
countArea=countArea+biaoganzhi-height[r]
print(countArea)
return countArea
if __name__ == '__main__':
print(Solution().trap([5,4,1,2]))
复制代码