当前位置: 首页 > news >正文

【leetcode hot 100 42】接雨水

错误解法:若height[left]>height[right]则代表有坑

class Solution {
    public int trap(int[] height) {
        int left = 0;
        int area = 0;
        while(left<height.length-1){
            // 找坑
            int right = left+1;
            while(right<height.length-1 && height[left]>height[right]){
                right++;
            }

            // 计算第i个坑的面积
            int length_i = right-left-1;
            // 取小的那边作为高
            int height_i = height[left]<height[right]?height[left]:height[right];
            int area_i = length_i * height_i;  // 忽略里面存在石头
            // 删除里面的石头
            for(int i=left+1;i<right;i++){
                area_i = area_i - height[i];
            }

            // 加入第i个坑的面积
            area = area + area_i;

            left = right;
        }
        return area;
    }
}

注意:

  • for循环中,条件为i<num.length;但在while循环中,条件为i<num.length-1

错误原因:右边仍满足条件,但没坑

在这里插入图片描述

正确解法:预先计算每根柱子的左侧最高柱子(包含该柱子本身)和右侧最高柱子(包含该柱子本身),然后再一次遍历计算每个柱子能接的雨水量。

class Solution {
    public int trap(int[] height) {
        // 计算每个柱子的左边最大值
        int[] leftMax = new int[height.length]; 
        leftMax[0] = height[0];
        for(int i=1; i<height.length; i++){
            leftMax[i] = Math.max(leftMax[i-1], height[i]);
        }

        // 计算每个柱子的右边最大值
        int[] rightMax = new int[height.length]; 
        rightMax[height.length-1] = height[height.length-1];
        for(int i=height.length-2; i>=0; i--){
            rightMax[i] = Math.max(rightMax[i+1], height[i]);
        } 

        // 计算每个柱子的接水量
        int area = 0;
        for(int i=0; i<height.length; i++){
            area = area + (Math.min(leftMax[i], rightMax[i]) - height[i]);
        }

        return area;
    }
}

相关文章:

  • unity学习57: toggle/选项/切换, 实现单选和多选效果
  • ptaC语言4-3 求给定精度的简单交错序列部分和
  • VScode在Windows11中配置MSVC
  • 为AI聊天工具添加一个知识系统 之125 详细设计之66 逻辑和平台
  • VMware虚拟机系统扩容
  • 【Linux】线程详解
  • 事故02分析报告:慢查询+逻辑耦合导致订单无法生成
  • unity学习60: 滑动条 和 滚动条 滚动区域
  • NocoBase 本周更新汇总:新增路由管理
  • 点云处理入门--PointNetPointNet++论文与代码详解
  • python制图之小提琴图
  • Unity学习笔记之——ugui的性能优化
  • 怎么进行mysql的优化?
  • 本地搭建Koodo Reader书库结合内网穿透打造属于自己的移动图书馆
  • QT6开发高性能企业视频会议-8 使用VSCode+Copilot AI开发
  • unity TextMeshPro动态字体使用
  • 流式抽样唯一元素方案设计
  • iconfont和TTF
  • 在VSCode 中使用通义灵码最新版详细教程
  • 【实战 ES】实战 Elasticsearch:快速上手与深度实践-1.2.2倒排索引原理与分词器(Analyzer)
  • 韩国大选连发“五月惊奇”:在野党刚“摆脱”官司,执政党又生“内讧”
  • “影像上海”中的自媒体影像特展:无论何时,影像都需要空间
  • 母亲节书单|关于生育自由的未来
  • 国内大模型人才大战打响!大厂各出奇招
  • 印控克什米尔地区再次传出爆炸声
  • 要更加冷静地看待“东升西降”的判断