leetcode 面试题 17.21. 直方图的水量(单调栈)

给定一个直方图(也称柱状图),假设有人从上面源源不断地倒水,最后直方图能存多少水量?直方图的宽度为 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

解题思路

维护一个单调递减的栈,当遍历到的元素大于栈中元素时,就将栈中的两个元素和当前元素组成一个接雨水的区域

代码

class Solution {public int trap(int[] height) {Stack<Integer> stack=new Stack<>();int n=height.length,res=0;for(int i=0;i<n;i++){while (!stack.isEmpty()&&height[i]>height[stack.peek()]){int top=stack.pop();if(stack.isEmpty())break;int l=stack.peek();int weight=i-l-1;int h=Math.min(height[l],height[i])-height[top];res+=h*weight;}stack.push(i);}return res;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/391511.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python:动态参数*args

动态参数 顾名思义&#xff0c;动态参数就是传入的参数的个数是动态的&#xff0c;可以是1个、2个到任意个&#xff0c;还可以是0个。在不需要的时候&#xff0c;你完全可以忽略动态函数&#xff0c;不用给它传递任何值。 Python的动态参数有两种&#xff0c;分别是*args和**kw…

3.5. Ticket

过程 3.4. Ticket 使用方法 New Ticket 新建Ticket, Ticket 可以理解为任务。 将Ticket 分配给团队成员 受到Ticket后&#xff0c;一定要更改Ticket 为 accept &#xff0c; 这时在View Tickets 中将会看到该Ticket已经分配&#xff0c; 编码过程 这里有一个特别的规定&…

Python操作Mysql实例代码教程在线版(查询手册)_python

实例1、取得MYSQL的版本在windows环境下安装mysql模块用于python开发MySQL-python Windows下EXE安装文件下载 复制代码 代码如下:# -*- coding: UTF-8 -*- #安装MYSQL DB for pythonimport MySQLdb as mdb con None try: #连接mysql的方法&#xff1a;connect(ip,user,pass…

批判性思维_为什么批判性思维技能对数据科学家至关重要

批判性思维As Alexander Pope said, to err is human. By that metric, who is more human than us data scientists? We devise wrong hypotheses constantly and then spend time working on them just to find out how wrong we were.正如亚历山大波普(Alexander Pope)所说…

leetcode 1143. 最长公共子序列(dp)

给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&#xff08;也可以…

【Spark】SparkStreaming-Kafka-Redis-集成-基础参考资料

SparkStreaming-Kafka-Redis-集成-基础参考资料 Overview - Spark 2.2.0 DocumentationSpark Streaming Kafka Integration Guide - Spark 2.2.0 DocumentationSpark Streaming Kafka Integration Guide (Kafka broker version 0.8.2.1 or higher) - Spark 2.2.0 Documentat…

Manjaro 17 搭建 redis 4.0.1 集群服务

安装Redis在Linux环境中 这里我们用的是manjaro一个小众一些的发行版 我选用的是manjaro 17 KDE 如果你已经安装好了manjaro 那么你需要准备一个redis.tar.gz包 这里我选用的是截至目前最新的redis 4.0.1版本 我们可以在官网进行下载 https://redis.io/download选择Stable &…

了解如何使用Flutter构建iOS和Android应用

Learn Flutter in this full course from Nick Manning (of fluttercrashcourse.com). Flutter is Google’s multi-platform mobile development framework used to create apps for Android and iOS using the Dart programming language. 可以从fluttercrashcourse.com的Nic…

leetcode 781. 森林中的兔子(hashmap)

森林中&#xff0c;每个兔子都有颜色。其中一些兔子&#xff08;可能是全部&#xff09;告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 answers 数组里。 返回森林中兔子的最少数量。 示例: 输入: answers [1, 1, 2] 输出: 5 解释: 两只回答了 “1” 的兔…

快速排序简便记_建立和测试股票交易策略的快速简便方法

快速排序简便记Note from Towards Data Science’s editors: While we allow independent authors to publish articles in accordance with our rules and guidelines, we do not endorse each author’s contribution. You should not rely on an author’s works without se…

Java学习第1天:序言,基础及配置tomcat

所谓是福不是祸&#xff0c;是祸躲不过&#xff0c;到底还是回到java的阵地上来。既然它这么热&#xff0c;那就学学它&#xff0c;现在这件事已经提上议事日程&#xff0c;也已经开始。 今天做的事&#xff1a; 泛泛的翻了几本书&#xff0c;敲了一些练习代码&#xff0c;比如…

robot:List变量的使用注意点

创建list类型变量&#xff0c;两种方式&#xff0c;建议使用Create List关键字 使用该列表变量时需要变为${}方式&#xff0c;切记切记&#xff01; 转载于:https://www.cnblogs.com/gcgc/p/11429482.html

python基础教程(十一)

迭代器 本节进行迭代器的讨论。只讨论一个特殊方法---- __iter__ &#xff0c;这个方法是迭代器规则的基础。 迭代器规则 迭代的意思是重复做一些事很多次---就像在循环中做的那样。__iter__ 方法返回一个迭代器&#xff0c;所谓迭代器就是具有next方法的对象&#xff0c;在调…

编程需要数学知识吗_编程需要了解数学吗?

编程需要数学知识吗Does programming require knowing math? Not necessarily. 编程需要了解数学吗&#xff1f; 不必要。 When I say that, Im mostly talking about Web Development, not working with graphics or specific applications that require advanced math. 当我…

美剧迷失_迷失(机器)翻译

美剧迷失Machine translation doesn’t generate as much excitement as other emerging areas in NLP these days, in part because consumer-facing services like Google Translate have been around since April 2006.如今&#xff0c;机器翻译并没有像其他NLP新兴领域那样…

mysql 1449 : The user specified as a definer ('usertest'@'%') does not exist 解决方法 (grant 授予权限)...

从服务器上迁移数据库到本地localhost 执行 函数 时报错&#xff0c; mysql 1449 &#xff1a; The user specified as a definer (usertest%) does not exist 经查&#xff0c;是权限问题(其中usertest是服务器上数据库的登录名)&#xff0c;解决办法&#xff1a; 授权给 u…

初识数据结构与算法

1、什么是数据结构&#xff1f; a、数据结构是一门研究非数值计算的程序设计问题中的操作对象&#xff0c;以及它们之间的关系和操作等相关问题的学科。 b、数据结构是计算机存储、组织数据的方式&#xff0c;数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常…

产品经理思考

1.分析QQ与微信的区别&#xff0c;包含其中存在的问题&#xff0c;并给出解决方案。 2.如果你设计一款基于音乐的高品质内容的社交软件&#xff0c;给说出这么设计的原因。 3.请说出一款APP的的看法&#xff0c;指出其中不合理的地方&#xff0c;并说明原因&#xff08;APP如果…

shopify 开发_播客第57集:从Shopify的作家到开发人员,与Adam Hollett一起

shopify 开发On this weeks episode of the freeCodeCamp podcast, Quincy interviews Adam Hollett. Hes a software developer at Shopify in Ottawa, Canada.在本周的freeCodeCamp播客节目中&#xff0c;Quincy采访了Adam Hollett。 他是加拿大渥太华Shopify的软件开发人员。…

机器学习中决策树的随机森林_决策树和随机森林在机器学习中的使用

机器学习中决策树的随机森林机器学习 (Machine Learning) Machine learning is an application of artificial intelligence that provides systems the ability to automatically learn and improve from experience without being explicitly programmed. The 3 main categor…