水槽存水(C/Py/Java/Js/Go)题解华为笔试真题 7月15号 非AI方向第一题 100分题型题目内容有一条直线水槽左右两端始终开口无挡板水可从两端流走水槽中从左到右插入了nnn块竖直挡板第iii块挡板高度为h[i]h[i]h[i]挡板厚度忽略不计。相邻两块挡板之间形成一个槽位槽底面积为111一共存在n−1n-1n−1个槽位。近期持续下雨每个槽位都能接收到充足的雨水直到水面稳定。对于槽位iii挡板iii与i1i1i1之间由于槽底面积为111故槽位的存水量数值等于其水面高度如果只有一个挡板则无法形成槽位其存水量为000。如下图所示555块挡板形成444个槽位以槽位333的存水量计算为例槽位333的水面高度受挡板222高度222和挡板555高度555影响水面高度为222故槽位333的存水量为222。输入描述第一行一个整数nnn1≤n≤300001 \le n \le 300001≤n≤30000表示挡板个数第二行nnn个整数h[1],h[2],...,h[n]h[1],h[2],...,h[n]h[1],h[2],...,h[n]1≤h[i]≤300001 \le h[i] \le 300001≤h[i]≤30000表示从左往右的每个挡板高度输出描述一个整数输出水槽水面稳定后所有槽位的总存水量样例1输入5 1 2 3 4 5输出10说明一共555个挡板可以形成444个槽位从左往右每个槽位存水量情况说明如下槽位111的存水量为111槽位222的存水量为222槽位333的存水量为333槽位444的存水量为444总存水量123410123410123410样例2输入6 3 1 2 5 4 5输出19说明一共666个挡板可以形成555个槽位从左往右每个槽位存水量情况说明如下 槽位111的存水量为333 槽位222的存水量为333 槽位333的存水量为333 槽位444的存水量为555 槽位555的存水量为555 总存水量333551933355193335519题解和思路思路实现思路模拟每个槽位能存储数量等于min(maxL, maxR)决定根据1的分析处理每个槽左侧/右侧最高挡板高度然后从前往后遍历确定每个操作能存水高度累加即可。算法平均时间复杂为O(n)C#includebits/stdc.husingnamespacestd;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intn;cinn;vectorinth(n);for(inti0;in;i){cinh[i];}// 没有槽位if(n1){cout0;return0;}// leftMax[i]第i块挡板左侧包括自己的最高挡板vectorintleftMax(n);leftMax[0]h[0];for(inti1;in;i){leftMax[i]max(leftMax[i-1],h[i]);}// rightMax[i]第i块挡板右侧包括自己的最高挡板vectorintrightMax(n);rightMax[n-1]h[n-1];for(intin-2;i0;i--){rightMax[i]max(rightMax[i1],h[i]);}longlongans0;// 枚举每个槽位挡板i与挡板i1之间for(inti0;in-1;i){ansmin(leftMax[i],rightMax[i1]);}coutans;return0;}Javaimportjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);intnsc.nextInt();int[]hnewint[n];for(inti0;in;i){h[i]sc.nextInt();}// 没有槽位if(n1){System.out.print(0);return;}// leftMax[i]第i块挡板左侧包括自己的最高挡板int[]leftMaxnewint[n];leftMax[0]h[0];for(inti1;in;i){leftMax[i]Math.max(leftMax[i-1],h[i]);}// rightMax[i]第i块挡板右侧包括自己的最高挡板int[]rightMaxnewint[n];rightMax[n-1]h[n-1];for(intin-2;i0;i--){rightMax[i]Math.max(rightMax[i1],h[i]);}longans0;// 枚举每个槽位挡板i与挡板i1之间for(inti0;in-1;i){ansMath.min(leftMax[i],rightMax[i1]);}System.out.print(ans);}}pythondefmain():nint(input())hlist(map(int,input().split()))# 没有槽位ifn1:print(0,end)return# leftMax[i]第i块挡板左侧包括自己的最高挡板leftMax[0]*n leftMax[0]h[0]foriinrange(1,n):leftMax[i]max(leftMax[i-1],h[i])# rightMax[i]第i块挡板右侧包括自己的最高挡板rightMax[0]*n rightMax[n-1]h[n-1]foriinrange(n-2,-1,-1):rightMax[i]max(rightMax[i1],h[i])ans0# 枚举每个槽位挡板i与挡板i1之间foriinrange(n-1):ansmin(leftMax[i],rightMax[i1])print(ans,end)if__name____main__:main()Javascriptconstreadlinerequire(readline);constrlreadline.createInterface({input:process.stdin,output:process.stdout});constinput[];rl.on(line,(line){input.push(line);});rl.on(close,(){constnNumber(input[0]);consthinput[1].split( ).map(Number);// 没有槽位if(n1){console.log(0);return;}// leftMax[i]第i块挡板左侧包括自己的最高挡板constleftMaxnewArray(n);leftMax[0]h[0];for(leti1;in;i){leftMax[i]Math.max(leftMax[i-1],h[i]);}// rightMax[i]第i块挡板右侧包括自己的最高挡板constrightMaxnewArray(n);rightMax[n-1]h[n-1];for(letin-2;i0;i--){rightMax[i]Math.max(rightMax[i1],h[i]);}letans0;// 枚举每个槽位挡板i与挡板i1之间for(leti0;in-1;i){ansMath.min(leftMax[i],rightMax[i1]);}process.stdout.write(ans.toString());});Gopackagemainimport(bufiofmtos)funcmax(a,bint)int{ifab{returna}returnb}funcmin(a,bint)int{ifab{returna}returnb}funcmain(){in:bufio.NewReader(os.Stdin)varnintfmt.Fscan(in,n)h:make([]int,n)fori:0;in;i{fmt.Fscan(in,h[i])}// 没有槽位ifn1{fmt.Print(0)return}// leftMax[i]第i块挡板左侧包括自己的最高挡板leftMax:make([]int,n)leftMax[0]h[0]fori:1;in;i{leftMax[i]max(leftMax[i-1],h[i])}// rightMax[i]第i块挡板右侧包括自己的最高挡板rightMax:make([]int,n)rightMax[n-1]h[n-1]fori:n-2;i0;i--{rightMax[i]max(rightMax[i1],h[i])}varansint64// 枚举每个槽位挡板i与挡板i1之间fori:0;in-1;i{ansint64(min(leftMax[i],rightMax[i1]))}fmt.Print(ans)}
企业数字化 ERP 产品动态
相关推荐
如何快速提升游戏性能:DLSS版本管理工具的终极指南 如何快速提升游戏性能:DLSS版本管理工具的终极指南 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper
DLSS Swapper是一款专为技术爱好者和游戏开发者设计的开源工具,它能够智能管理NVIDIA DLSS、A… · 2026/7/28 16:35:50
CNN-LSTM-KAN混合架构在时序预测中的实践与优化 1. 项目背景与核心价值在时间序列预测和复杂模式识别领域,传统神经网络架构正面临三大挑战:特征提取的局限性、长期依赖关系的捕捉能力不足,以及模型可解释性的缺失。这个项目提出的CNN-LSTM-KAN混合架构,正是为了解决这些痛点而生… · 2026/9/17 14:32:06
LLM与强化学习结合:PPO算法优化对话模型实战 1. 项目背景与核心价值大型语言模型(LLM)与强化学习(RL)的结合是当前AI领域最前沿的研究方向之一。这个项目标题虽然简短,但背后涉及两个关键技术点的交叉应用:如何将强化学习框架有效集成到预训练语言模型… · 2026/9/20 21:04:01
GPTQ 集成实战:与 Transformers、PEFT、vLLM、TGI 与 LangChain 的完整对接指南 GPTQ 集成实战:与 Transformers、PEFT、vLLM、TGI 与 LangChain 的完整对接指南 【免费下载链接】AI-Research-SKILLs Comprehensive open-source library of AI research and engineering skills for any AI model. Package the skills and your claude code/codex… · 2026/9/23 16:19:39
AIoT边缘计算网关怎么选?从场景出发,找到最匹配的那一款 选型之前,先别急着看参数很多人选边缘计算网关,第一反应是打开规格书,比CPU核心数、比NPU算力、比接口数量。比着比着就乱了——这个型号算力高但串口少,那个型号串口多但没NPU,还有一个什么都好但价格超预算。正确的顺… · 2026/9/23 16:19:32
Python图像识别主板质检:模板匹配与特征工程实战 简介:这是一套面向计算机视觉初学者与工业质检方向开发者的主板质量检测系统源码,基于Python与图像识别技术实现,可用于学习缺陷检测、目标检测与关键点识别等典型任务的工程落地。资源包共41个文件,以34个Python脚本为核心&#… · 2026/9/23 16:19:32
iptables 防火墙速查表:Linux 内核防火墙命令实战指南 文档知识库教程开发工具 【免费下载链接】reference 为开发人员分享快速参考备忘清单(速查表) 项目地址: https://gitcode.com/jaywcjlove/reference 点击查看 免费下载 iptables 是配置 Linux 内核防火墙的命令行工具,属于 netfilter 项目的一部分&… · 2026/9/23 16:19:32
AutoJs 4.1.0 Android自动化脚本入门:无障碍服务与控件选择器实战 我第一次听说“clsq客户端”这个名字时,第一反应是某个内部工具,后来被朋友拉到一起折腾才发现,它背后真正有价值的东西其实是基于AutoJs 4.1.0的一套Android自动化脚本方案。AutoJs这个工具在国内Android圈子里名声很大,它是一个… · 2026/9/23 16:19:26
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29