首页 > 其他分享 >LeetCode 42.接雨水

LeetCode 42.接雨水

时间:2023-10-18 11:33:24浏览次数:41  
标签:right min int max sum 42 雨水 height LeetCode

image

直觉来看,每一个正方形可以容纳1个单位的水。
按列来求,迭代求每一列可以容纳多少单位的水,累加。
找出每一列左右两边最高的柱子,遍历时,不用关注第一列和最后一列。然后找到两边最高中较小的柱子,与当前列高度比较,大于,则可以装水,其他不可以。
代码:

class Solution {
    public int trap(int[] height) {
        // 宽都是1,柱子。h为height[i]。容量是由每个柱子的高度差产生的
        // 遍历每一列,分别求出两边最高的墙
        int sum = 0;
        // 两端不用考虑
        for (int i = 1; i < height.length-1; i++) {
            int max_left = 0;
            // 找出左边最高 ,从右到左找
            for (int j = i-1; j >= 0; j--) {
                if (height[j] > max_left) {
                    max_left = height[j];
                }
            }

            int  max_right = 0;
            // 找出右边最高, 从左到右找,注意这里的x < height.length, 要到最后一个柱子
            for (int x = i +1; x < height.length; x++) {
                if (height[x] > max_right) {
                    max_right = height[x];
                }
            }
            // 找出较小的
            int min = Math.min(max_left, max_right);
            // 只有较小的一段大于当前列才会有水,否则不会有
            if (min > height[i]) {
                sum = sum + (min - height[i]);
            }

        }
        return sum;

    }
}

标签:right,min,int,max,sum,42,雨水,height,LeetCode
From: https://www.cnblogs.com/dongone/p/17771674.html

相关文章

  • [Leetcode] 0066. 加一
    66.加一题目描述给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位,数组中每个元素只存储单个数字。你可以假设除了整数0之外,这个整数不会以零开头。 示例 1:输入:digits=[1,2,3]输出:[1,2,4]解释:输入数组表示数字1......
  • [LeetCode] 2530. Maximal Score After Applying K Operations
    Youaregivena 0-indexed integerarray nums andaninteger k.Youhavea startingscore of 0.Inone operation:chooseanindex i suchthat 0<=i<nums.length,increaseyour score by nums[i],andreplace nums[i] with ceil(nums[i]/3).......
  • 【前缀和优化 dp】CF1542E2 Abnormal Permutation Pairs (hard version) 题解
    CF1542E2首先时间复杂度肯定是\(\mathcal{O}(n^3)\)的。容易想到先枚举最长公共前缀,然后枚举\(p_{len+1}\)和\(q_{len+1}\),再枚举逆序对数进行统计。令\(f_{i,j}\)表示有\(j\)个逆序对的\(i\)阶排列的个数。易得转移\(f_{i,j}=\sum\limits_{k=\max(j-i+1,0)}^{j}f......
  • Leetcode24. 两两交换链表中的节点
    题目描述给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例提交的代码classSolution{ListNodenextNode;publicListNodeswapPairs(ListNodehead){//特殊化处理......
  • 【Azure Logic App】使用Outlook.com发送邮件遇到429报错
    问题描述在LogicApp中使用Outlook.com组件发送邮件,遇见了outlookconnection报429的错误{"error":{"code":"ErrorExceededMessageLimit","message":"Cannotsendmail.DailyMessage/Recipientlimitexceeded.Followtheinstructionsinyo......
  • 【Azure Logic App】使用Outlook.com发送邮件遇到429报错
    问题描述在LogicApp中使用Outlook.com组件发送邮件,遇见了outlookconnection报429的错误{"error":{"code":"ErrorExceededMessageLimit","message":"Cannotsendmail.DailyMessage/Recipientlimitexceeded.Followtheinstructionsinyour......
  • 代码随想训练营第四天(Python)| 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点
    两两交换链表中的节点关键点:涉及到头节点变动的都使用虚拟节点。画图找出交换节点指向的顺序和退出循环的条件。1、迭代法classSolution:defswapPairs(self,head:Optional[ListNode])->Optional[ListNode]:dummy_node=ListNode(next=head)cur=......
  • Leetcode206. 反转链表
    题目描述给你单链表的头节点head,请你反转链表,并返回反转后的链表。示例提交的代码classSolution{publicListNoderesultHead;publicListNodereverseList(ListNodehead){if(head==null)returnnull;ListNodefirst=recursionOfList(he......
  • [Leetcode] 0058. 最后一个单词的长度
    58.最后一个单词的长度题目描述给你一个字符串s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。单词是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例1:输入:s="HelloWorld"输出:5解释:最后一个单词是“World”,长度为5。......
  • 禅道V16.5SQL注入漏洞(CNVD-2022-42853)
    禅道V16.5SQL注入漏洞(CNVD-2022-42853)0x01介绍禅道项目管理软件是一款国产的、基于LGPL协议、开源免费的项目管理软件,它集产品管理、项目管理、测试管理于一体,同时还包含了事务管理、组织管理等诸多功能,是中小型企业项目管理的首选,基于自主的PHP开发框架──ZenTaoPHP而成,第三......