【程序员面试金典】面试题 17.21. 直方图的水量

news2024/10/6 8:36:01

【程序员面试金典】面试题 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

解题思路

思路:最直观的想法是,当前直方图所能存储水量等于左边最大值和右边最大值之间的最小值减去当前高度,直方图的水量即所有直方图的水量之和。首先分别前向遍历、后向遍历求出当前直方图左边(包含当前)、右边(包含当前)的最大值,然后再前向遍历求出当前直方图水量即可。

int trap(vector<int>& height) 
{
  int n=height.size();
  //特殊判断
  if(n==0)
    return 0;
  //存储当前元素左边(包含当前)的最大值
  vector<int> left(n,0);
  //存储当前元素右边(包含当前)的最大值
  vector<int> right(n,0);
  left[0]=height[0];
  right[n-1]=height[n-1];
  for(int i=1;i<n;i++)
     left[i]=max(left[i-1],height[i]);
  for(int i=n-2;i>=0;i--)
     right[i]=max(right[i+1],height[i]);
  int res=0;
  //所能存储水量等于左边最大值和右边最大值之间的最小值减去当前高度
  for(int i=0;i<n;i++)
     res+=min(left[i],right[i])-height[i];
  return res;
}

总结:注意,之所以包含当前,是为了方便计算,因为有可能当前就是最高的。

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

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

相关文章

从数据取地址运算符 从地址取数据运算符* 数组函数传送三种方法

概念 a表示数据本身。 &a表示a对应的地址。 *a表示存a数据的地址。 #include<stdio.h> int main() { int a 10; int *b &a; int* d &a; int c *b; …

Spring Boot 中的 WebSocketSession 是什么,原理,如何使用

Spring Boot 中的 WebSocketSession 是什么&#xff0c;原理&#xff0c;如何使用 介绍 在现代 Web 应用程序中&#xff0c;实时通信是一个非常常见的需求。传统的 HTTP 协议是无法支持实时通信的&#xff0c;因为它是一种无状态协议&#xff0c;每次请求都是独立的&#xff0…

实现数据库版本的留言墙(表白墙)练习

目录 目标 1.创建工程 2.构建目录工程结构 3.设置编码格式 4.查看Maven的配置 6.导入HTML和JS&#xff0c;配置tomcat 7.测试网站是否可以正常访问 8.编写业务代码 目标&#xff1a; 1.熟练掌握前端向后端提交数据2.后端接收数据并校验3.通过JAVA代码进行数据库操作4.返回…

8、Redis哨兵(sentinel)

是什么? 吹哨人巡查监控后台master主机是否故障&#xff0c;如果故障了根据投票数 \textcolor{red}{投票数}投票数自动将某一个从库转换为新主库&#xff0c;继续对外服务 作用&#xff1a;俗称无人值守运维 能干嘛? 主从监控&#xff1a;监控主从redis库运行是否正常 消息…

云原生|kubernetes|离线化部署kubesphere(从网络插件开始记录)

前言&#xff1a; kubesphere的离线化部署指的是通过自己搭建的harbor私有仓库拉取镜像&#xff0c;完全不依赖于外部网络的方式部署。 我的kubernetes集群是一个单master节点&#xff0c;双工作节点&#xff0c;总计三个节点的版本为1.22.16的集群。 该集群只是初始化完成了…

华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(一)

系列文章目录 个人简介&#xff1a;机电专业在读研究生&#xff0c;CSDN内容合伙人&#xff0c;博主个人首页 Python面试专栏&#xff1a;《Python面试》此专栏面向准备面试的2024届毕业生。欢迎阅读&#xff0c;一起进步&#xff01;&#x1f31f;&#x1f31f;&#x1f31f; …

如何在VirtualBox安装CentOS 7

一、简介VirtualBox VirtualBox 是一款开源虚拟机软件。VirtualBox 是由德国 Innotek 公司开发&#xff0c;由Sun Microsystems公司出品的软件&#xff0c;使用Qt编写&#xff0c;在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。Innotek 以 GNU General Public Lice…

6、多层感知机:数值稳定性和模型初始化

1、数值稳定性 考虑一个具有 L L L层、输入 x \mathbf{x} x和输出 o \mathbf{o} o的深层网络。每一层 l l l由变换 f l f_l fl​定义&#xff0c;该变换的参数为权重 W ( l ) \mathbf{W}^{(l)} W(l)&#xff0c;其隐藏变量是 h ( l ) \mathbf{h}^{(l)} h(l)&#xff08;令 h …

Java BaseDao

1.创建t_house、t_user、t_address表 t_house t_user表 t_address表 2.创建实体类 House类 User类 Address类 3.创建BaseDao工具类 4.创建HouseDao接口 5.创建HouseDaoImpl实现类 6.创建HouseService接口 7.创建HouseServiceImpl实现类 8.创建Test001测试类

kubectl详解之陈述式资源管理方法

目录 一、陈述式资源管理方法二、基本信息查看2.1 创建 kubectl create命令2.2 发布 kubectl expose命令2.3 service 的 type 类型2.4 K8s 如何查看 Pod 崩溃前的日志&#xff1f;2.5 更新 kubectl set 命令2.6 滚动更新详解2.7 回滚 kubectl rollout2.8 删除 kubectl delete 一…

用IPV6地址远程连接服务器端(Linux系统)

环境&#xff1a;centos7、防火墙放行、selinux放行 目的&#xff1a;用ipv6&#xff0c;ssh远程访问服务器 修改/etc/ssh/sshd_config&#xff08;记得重启服务&#xff09; 查看服务端的ipv6&#xff08;我有两张网卡&#xff0c;记住内网卡ens34的ipv6地址&#xff09; [r…

【解决openGauss安装后yum、ssh命令无法使用】

【解决openGauss安装后yum、ssh命令无法使用】 &#x1f53b; 一、操作系统及数据库版本&#x1f530; 1.1 操作系统版本&#x1f530; 1.2 openGauss数据库版本 &#x1f53b; 二、关于openGauss安装&#x1f53b; 三、问题详情&#x1f530; 3.1 使用yum命令报错&#x1f530…

学习Vue3——To全家桶

toRef 如果原始对象是非响应式的&#xff0c;就不会更新视图&#xff0c; 数据是会变的 <template><div>{{ person }}</div><div>{{ name }}</div><button click"change">修改</button> </template><script se…

数据跨度长达10年!这款Android 应用遭重大数据泄露

据The Hacker News 6月29日消息&#xff0c;一款基于 Android 的手机监控应用程序LetMeSpy披露了一个安全漏洞&#xff0c;该漏洞已导致未经授权的第三方窃取了数千名用户的敏感数据。 LetMeSpy 在其网站上发布的公告中声称&#xff0c;通过此次攻击&#xff0c;攻击者获得了用…

javafx实现图片缩放和拖动

目录 前言方式一方式二1.带有滚动条的缩放&#xff08;1&#xff09;代码&#xff08;2&#xff09;效果 2.fxml 布局java代码(1) fxml 布局文件(2) java 代码(3) 效果 前言 本文使用的是 jdk8 的 javafx 运行实现的图片缩放操作效果。 方式一 通过改变 ImageView 的 FitHei…

element 日期选择器下拉框被覆盖

解决&#xff1a;在对应下拉框el-select 标签 添加calss属性即可。此方法不仅适用于日期下拉框&#xff0c;适用于所有下拉框 class"dropdownbox" .dropdownbox{ z-index: 10001 !important; } 图片来自&#xff1a;element ui 时间筛选样式遮盖问题修复_代码搬运媛…

Jmeter接口测试:jmeter导入和导出接口的处理

JMeter测试导入接口 利用Jmeter测试上传文件&#xff0c;首先可根据接口文档或者fiddler抓包分析文件上传的接口&#xff1b;如下图&#xff1a; 以下是我通过fiddler所截取的文件上传的接口 1、填写导入接口的信息 查看文件上传栏下的填写信息&#xff1a; 文件名称&#x…

【STM32】软件I2C控制频率

在上一篇文章中&#xff0c;我们已经介绍了整个软件I2C的实现原理&#xff0c;但是也遗留了一个问题&#xff0c;那就是I2C速率的控制&#xff0c;其实就是控制SCL信号的频率。 微秒级延时 在上篇文章中&#xff0c;我们使用了SysTick进行延时&#xff0c;具体如下&#xff1…

分析生态系统服务社会价值问题

生态系统服务是人类从自然界中获得的直接或间接惠益&#xff0c;可分为供给服务、文化服务、调节服务和支持服务4类&#xff0c;对提升人类福祉具有重大意义&#xff0c;且被视为连接社会与生态系统的桥梁。自从启动千年生态系统评估项目&#xff08;Millennium Ecosystem Asse…

飞致云开源社区月度动态报告(2023年6月)

自2023年6月起&#xff0c;中国领先的开源软件公司FIT2CLOUD飞致云将以月度为单位发布《飞致云开源社区月度动态报告》&#xff0c;旨在向广大社区用户同步飞致云旗下系列开源软件的发展情况&#xff0c;以及当月主要的产品新版本发布、社区运营成果等相关信息。 飞致云开源大…