首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Leetcode】--- 接雨水

【Leetcode】--- 接雨水

作者头像
用户11288958
发布2025-01-27 00:14:37
发布2025-01-27 00:14:37
25800
代码可运行
举报
文章被收录于专栏:学习学习
运行总次数:0
代码可运行

题目传送门

方法一: 前缀和+后缀和

算法原理

需要两个数组。 第一个数组存储最左边到第 i 个位置的最大高度(前缀最大值) 第二个数组存储最右边到第 i 个位置的最大高度(后缀最大值) 最终第 i 个位置的 接水量 = min(第 i 位置的前缀最大值,第 i 位置的后缀最大值)- 第 i 位置的高度

例如上示例: height = 0,1,0,2,1,0,1,3,2,1,2,1 前缀最大值 = 0,1,1,2,2,2,2,3,3,3,3,3 后缀最大值 = 3,3,3,3,3,3,3,3,2,2,2,1 最终求得 0,0,1,0,1,2,1,0,0,1,0,0 累加得6

代码:

代码语言:javascript
代码运行次数:0
运行
复制
class Solution {
    public int trap(int[] height) {
        int n = height.length;
        int[] f = new int[n];
        int[] g = new int[n];
        f[0] = height[0];
        g[n-1] = height[n-1];
        int sum = 0;

        for(int i = 1; i < n; i++){
            f[i] = Math.max(height[i],f[i-1]);  
        }
        for(int i = n-2; i >= 0; i--){
            g[i] = Math.max(height[i],g[i+1]);  
        }

        for(int i = 0; i < n; i++){
            sum += Math.min(f[i],g[i]) - height[i];
        }
        return sum;
    }
}

复杂度分析

时间复杂度:O(n) 空间复杂度 :O(n)

解法二:双指针(法一的优化)

算法原理

如果左边前缀最大值比右边前缀最大值小,那么接水量就是左边前缀最大值 - 当前高度 如果左边前缀最大值比右边前缀最大值大,那么接水量就是右边前缀最大值 - 当前高度

代码:

代码语言:javascript
代码运行次数:0
运行
复制
class Solution {
    public int trap(int[] height) {
        int n = height.length;
        int left = 0;
        int right = n -1;
        int left_MAX = 0,right_MAX = 0;
        int sum = 0;
        
        while(left < right){
            left_MAX = Math.max(height[left],left_MAX);
            right_MAX = Math.max(height[right],right_MAX);
            if(left_MAX < right_MAX){
                sum += left_MAX - height[left];
                left++;
            }else{
                sum += right_MAX - height[right];
                right--;
            }        
        }
        return sum;
    }
}

复杂度分析

时间复杂度:O(n) 空间复杂度 :O(1)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目传送门
  • 方法一: 前缀和+后缀和
    • 算法原理
    • 代码:
    • 复杂度分析
  • 解法二:双指针(法一的优化)
    • 算法原理
    • 代码:
    • 复杂度分析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档