LeetCodeDiary

A Diary for solving LeetCode problems

View on GitHub
class Solution:
    def trap(self, height: List[int]) -> int:
        Sum = sum(height) # 得到柱子的体积
        size = len(height) 
        left, right = 0, size - 1 # 双指针初始化
        volume, high = 0, 1 # 总体积和高度初始化
        while (left <= right):
            while (left <= right and height[left] < high): 
                left += 1 
            while (left <= right and height[right] < high):
                right -= 1
            volume += right - left + 1 # 每一层的容量都加起来
            high += 1 # 高度加一
        return volume - Sum # 总体积减去柱子体积,即雨水总量

数组 困难 双指针法妙啊!

我想到了按层计算水量,但是时间复杂度O(n),无法通过最后一个测试

https://leetcode-cn.com/problems/volume-of-histogram-lcci/

👇O(n)的屑代码

class Solution:
    def trap(self, height: List[int]) -> int:
        d = dict()
        ans = 0
        for i,n in enumerate(height):
            for j in range(1,n+1):
                if j in d:
                    ans += (i - d[j][-1] - 1)
                    d[j].append(i)
                else:
                    d[j] = [i]
        return ans