LeetCode-42. 接雨水

方法一:

python 复制代码
class Solution:
    def trap(self, height: list[int]) -> int:
        n=len(height)
        pre_max=[0]*n   # pre_max[i] 表示从 height[0] 到 height[i] 的最大值
        pre_max[0]=height[0]
        for i in range(1,n):
            pre_max[i]=max(pre_max[i-1],height[i])
        suf_max=[0]*n   # suf_max[i] 表示从 height[i] 到 height[n-1] 的最大值
        suf_max[-1]=height[n-1]
        for i in range(n-2,-1,-1):
            suf_max[i]=max(suf_max[i+1],height[i])
        ans=0
        for i in range(0,n):#for h, pre, suf in zip(height, pre_max, suf_max):
            ans+=min(pre_max[i],suf_max[i])-height[i] # 累加每个水桶能接多少水
        return ans
  • 时间复杂度:O(n),其中 n 是 height 的长度。
  • 空间复杂度:O(n)。

zip(*iterables) 是内置函数,把多个可迭代对象按位置配对打包,返回一个 zip 迭代器 。

a = 1,2,3

b = "x","y","z"

z = zip(a,b)

print(z) # <zip object at 0x...> 迭代器

转list查看结果

print(list(z))

(1, 'x'), (2, 'y'), (3, 'z') =>元组的列表

names = "Alice","Bob"

ages = 20,22

for name, age in zip(names, ages):

print(name, age) =》name,age分别取值

方法二:

python 复制代码
class Solution:
    def trap(self, height: list[int]) -> int:
        ans = pre_max = suf_max = 0
        left, right = 0, len(height) - 1
        while left < right:
            pre_max = max(pre_max, height[left])  # 前缀最大值
            suf_max = max(suf_max, height[right])  # 后缀最大值
            if pre_max < suf_max:  # 可以确定 left 处的接水量
                ans += pre_max - height[left]
                left += 1  # 搞定了 left,现在问题缩小到 [left+1, right]
            else:  # 可以确定 right 处的接水量
                ans += suf_max - height[right]
                right -= 1  # 搞定了 right,现在问题缩小到 [left, right-1]
        return ans
  • 时间复杂度:O(n),其中 n 是 height 的长度。
  • 空间复杂度:O(1)。
相关推荐
lengxuenong1 小时前
枚举及其优化学习手册
c++·学习·算法·青少年编程
小O的算法实验室1 小时前
IEEE TAI,RoCo:基于角色的LLM协作实现自动启发式设计
算法
小范的技术工坊1 小时前
大模型蒸馏
人工智能·算法·数据挖掘·大模型
Benny_Tang1 小时前
P9527 [JOIST 2022] 洒水器 / Sprinkler 题解
c++·算法
kiracrimson2 小时前
希尔排序:让插入排序不再怕逆序
数据结构·算法·排序算法
yi0113 小时前
DAY17: LeetCode 139|单词拆分:从“把单词删掉”到用 DP 记录合法切口
人工智能·笔记·python·算法·leetcode·动态规划
陈希瑞3 小时前
LongCat-2.5-Preview 的web逆向能力实测
人工智能·算法·wasm
tangguofeng4 小时前
基于分治策略的循环赛日程表问题的思路讲解
算法
起个名字费劲死了5 小时前
VisionMaster集成深度学习算法(基础狗)
人工智能·深度学习·算法