363.Trapping Rain Water-接雨水(中等题)

2024-04-22 13:08

本文主要是介绍363.Trapping Rain Water-接雨水(中等题),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

接雨水

  1. 题目

    给出 n 个非负整数,代表一张X轴上每个区域宽度为 1 的海拔图, 计算这个海拔图最多能接住多少(面积)雨水。
    这里写图片描述

  2. 样例

    如上图所示,海拔分别为 [0,1,0,2,1,0,1,3,2,1,2,1], 返回 6.

  3. 挑战

    O(n) 时间, O(1) 空间
    O(n) 时间, O(n) 空间也可以接受

  4. 题解

    能接雨水的多少直接取决于左右端点的高度较小的那一个,使用双指针分别指向首末元素,每次选择高度小的指针向另一个指针移动,并和原来位置的高度进行比较,如果大于原指针位置元素高度则记录新的高度,反之将高度差作为雨水值保留,直至两指针相遇。

public class Solution {/*** @param heights: an array of integers* @return: a integer*/public int trapRainWater(int[] heights) {int result = 0;int left = 0;int right = heights.length-1;if (left >= right){return result;}int leftHeight = heights[left];int rightHeight = heights[right];while (left < right){if (heights[left] < heights[right]){left++;if (leftHeight > heights[left]){result += (leftHeight - heights[left]);}else{leftHeight = heights[left];}}else{right--;if (rightHeight > heights[right]){result += (rightHeight - heights[right]);}else{rightHeight = heights[right];}}}return result;}
}

Last Update 2016.11.8

这篇关于363.Trapping Rain Water-接雨水(中等题)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/925863

相关文章

力扣接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 示例 2: 输入:height

【中等】保研/考研408机试-二分查找(模板题)

二分查找就是在一个有序数组中查找某个值,以首端尾端的中点mid查找对比,mid与要查找的数进行对比,看落在哪个区间,在那个区间重新得到首端和尾端,进而得到新的mid值。 一、模板题 二分查找-I_牛客题霸_牛客网 class Solution {public:int search(vector<int>& nums, int target) {int left=0,right=nums.s

Java中等题-整数替换(力扣)

给定一个正整数 n ,你可以做如下操作: 如果 n 是偶数,则用 n / 2替换 n 。如果 n 是奇数,则可以用 n + 1或n - 1替换 n 。 返回 n 变为 1 所需的 最小替换次数 。 示例 1: 输入:n = 8输出:3解释:8 -> 4 -> 2 -> 1 示例 2: 输入:n = 7输出:4解释:7 -> 8 -> 4 -> 2 -> 1或 7 ->

Java中等题-摆动序列(力扣)

如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。 例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。 相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一

Java中等题-递增的三元子序列(力扣)

你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。 如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。 示例 1: 输入:nums = [1,2,3,4,5]输出:true解释:任何 i < j < k 的三元组都满足题意

LeetCode - 11. Container With Most Water

11. Container With Most Water  Problem's Link  ---------------------------------------------------------------------------- Mean:  给你一个N条垂直于x轴的直线,从中找两条直线和x轴组成一个桶状容器,使得这个容器的容量最大. analyse:

LeetCode - 42. Trapping Rain Water

42. Trapping Rain Water  Problem's Link  ---------------------------------------------------------------------------- Mean:  在坐标上给你一些竖直放置的条形积木,问你这个积木能够容纳多少液体. analyse: 首先找出最高的积木,然后从前往后一直

【HDU】2389 Rain on your Parade 二分匹配 Hopcroft-Krap算法

传送门:【HDU】2389 Rain on your Parade 题目分析: 这题目非要我学Hopcroft-Krap= =||。。普通的DFS版的二分匹配不行,最大流又爆内存。。不得不学更好的算法了。 二分匹配的其他性质我也不多说了,不会的自行搜索,网上很多的。 现在我主要对该算法的实现发表一下自己的见解。(算法复杂度的证明不会,论文没看太懂) 该算法的核心思想是通过bfs寻找

Leetcode—72. 编辑距离【中等】

2024每日刷题(158) Leetcode—72. 编辑距离 动态规划算法思想 实现代码 class Solution {public:int minDistance(string word1, string word2) {const int m = word1.length();const int n = word2.length();vector<vector<int>>

力扣面试经典算法150题:接雨水

接雨水 今天的题目是力扣面试经典算法150题中的困难难度数组题目:分发糖果。 题目链接:https://leetcode.cn/problems/trapping-rain-water/description/?envType=study-plan-v2&envId=top-interview-150 题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱