LeetCode:接雨水【42】

LeetCode:接雨水【42】

题目描述

  给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

  

  上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。

示例:

  输入: [0,1,0,2,1,0,1,3,2,1,2,1]
  输出: 6

题目分析

  1. 找出最高点
  2. 分别从两边往最高点遍历:如果下一个数比当前数小,说明可以接到水

Java题解

class Solution {
    public int trap(int[] height) {
        int result = 0;
        int maxValue = -1;
        int maxAddr = 0;
        for(int i = 0;i<height.length;i++){
            if(height[i]>=maxValue){
                maxValue = height[i];maxAddr=i;
            }
        }
        //左半部分处理
        for(int left = 0;left<maxAddr;left++){
            for(int i =left+1;i<=maxAddr;i++){
                if(height[i]<height[left])
                    result=result+(height[left]-height[i]);
                else
                    left = i;
            }
        }
        //右半部分处理
        for(int right =height.length-1;right>maxAddr;right--){
            for(int i =right-1;i>=maxAddr;i--){
                if(height[i]<height[right])
                    result=result+(height[right]-height[i]);
                else
                    right = i;
            }
        }
        return result;
    }
}

  

原文地址:https://www.cnblogs.com/MrSaver/p/11657472.html

时间: 2024-10-16 10:58:13

LeetCode:接雨水【42】的相关文章

leetcode接雨水问题的总结

题目:leetcode 42题 解法一:动态规划 int trap(vector<int>& height) { int ans = 0; int size = height.size(); if(size) { vector<int> max_left(size); vector<int> max_right(size); max_left[0] = height[0]; max_right[size-1] = height[size-1]; for(int

【sql】leetcode习题 (共 42 题)

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica } [175]Combine Two Tables [176]Second Highest Salary [177]Nth Highest Salary [178]Rank Scores [180]Consecutive Numbers [181]Employees Earning More Than Their Managers [182]Duplicate Email

LeetCode 268

Missing Number Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missing from the array. For example, Given nums = [0, 1, 3] return 2. Note: Your algorithm should run in linear runtime complexity. Could you

[leetcode] 42. 接雨水

42. 接雨水 思路:一块柱子能接水的量取决于它左右两边最高的柱子中较短的一个. class Solution { public int trap(int[] height) { int left[] = new int[height.length]; int right[] = new int[height.length]; int max = 0; for (int i = 0; i < height.length; i++) { max = Math.max(max, height[i])

[ Leetcode ] No.42 接雨水

题目: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 解题思路: 首先构建两个栈,h存高度,idx存下标. 遍历数组,将height[i]与h.top()做比较 若height[i] <= h.top(),则将对应的高度和下标都入栈. 若height[i] > h.top(),则表明可能可以求得面积. 实际上,对于index = k的方块而言,可能接住的雨水等于

leetCode 42.Trapping Rain Water(凹槽的雨水) 解题思路和方法

Trapping Rain Water Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining. For example, Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6. The above elevation map

[Leetcode][Python]42: Trapping Rain Water

# -*- coding: utf8 -*-'''__author__ = '[email protected]' 42: Trapping Rain Waterhttps://oj.leetcode.com/problems/trapping-rain-water/ Given n non-negative integers representing an elevation map where the width of each bar is 1,compute how much water

Leetcode 407.接雨水

接雨水 给定一个 m x n 的矩阵,其中的值均为正整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水. 说明: m 和 n 都是小于110的整数.每一个单位的高度都大于0 且小于 20000. 示例: 给出如下 3x6 的高度图: [ [1,4,3,1,3,2], [3,2,1,3,2,4], [2,3,3,2,3,1] ] 返回 4. 如上图所示,这是下雨前的高度图[[1,4,3,1,3,2],[3,2,1,3,2,4],[2,3,3,2,3,1]] 的状态. 下雨后,

11-1:(42)接雨水

42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水). 感谢 Marcos 贡献此图. 示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 An understandable python solution: class Solution(object): def tr