给定 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
我们可以,计算每一个位置,对应的左边最大值和右边最大值,即从这个位置,向左看,找到最高块的高度,设为他的左边最大值;同理,向右看,找到右边的最高快的高度,设为他的右边最大值。
左边最大值:

右边最大值:

然后,我们可以计算每块低洼处可以存放的水,就是该位置的左边最大值和右边最大值两个值中的较小值,然后再减去该位置块的高度,就是此位置低洼处的存水量,然后将每个位置的存水量累加,就是最后的结果。

如上图:
在下标为0,左右最大值的较小值为0,此处高度为0,相减得此处的存水量为0;
在下标为1,左右最大值的较小值为1,此处高度为1,相减得此处的存水量为0;
在下标为2,左右最大值的较小值为1,此处高度为0,相减得此处的存水量为1;
在下标为3,左右最大值的较小值为2,此处高度为2,相减得此处的存水量为0;
………………

代码:
class Solution {
public int trap(int[] height) {
if(height.length == 0) return 0;
int result = 0;
int len = height.length;
int[] lMax = new int[len];
int[] rMax = new int[len];
lMax[0] = height[0];
rMax[len-1] = height[len-1];
for(int i = 1;i<len;i++) {
lMax[i] = Math.max(lMax[i-1], height[i]);
}
for(int i = len-2;i>=0;i--) {
rMax[i] = Math.max(rMax[i+1], height[i]);
}
for(int i = 0;i<len;i++) {
result += Math.min(lMax[i], rMax[i]) - height[i];
}
return result;
}
}
在使用Rubyv2.2.2的ElCapitan(MacOSX10.11.1)上安装Rails时,出现以下错误:ERROR:Errorinstallingnokogiri:ERROR:Failedtobuildgemnativeextension./Users/jon/.rvm/rubies/ruby-2.2.2/bin/ruby-r./siteconf20151117-26799-ux15fd.rbextconf.rb--use-system-librariescheckingiftheCcompileraccepts...***extconf.rbfailed***Couldnotc
免责声明伙计们,我确实知道Whydoes10..toString()work,but10.toString()doesnot?问题存在,但问题是它没有提供正式的解释。Thespecification'sinterpretationofthe.characterinthatparticularpositionisthatitwillbeadecimal.ThisisdefinedbythenumericliteralsyntaxofECMAScript.不引用标准是不够可信的问题正文我下意识地明白了42..toString()被解析器视为42.数字,后跟.toString()调用。我不明
在我的时事通讯中看到了这个。在Chrome和Firefox上测试。我还是想不通。[]+(-~{}-~{}-~{}-~{})+(-~{}-~{});//=>"42" 最佳答案 评估:~{}使用内部函数求值:~ToInt32({})给出-1。引用ECMA规范-http://www.ecma-international.org/ecma-262/5.1/#sec-9.5这个解释-http://jibbering.com/faq/notes/type-conversion/#tcToInt32因此,在这种情况下(-~{}-~{})==2(-
从语言设计的Angular来看,为什么if('k'in42);抛出TypeError异常for('k'in42);不是吗?我已阅读ECMAScript规范中的以下部分:11.8.7Theinoperator12.6.4Thefor-inStatement有人可以解释这种不一致的原因吗?为什么if(...)中的表达式'k'in42不能计算为false? 最佳答案 重新阅读in部分。IfType(rval)isnotObject,throwaTypeErrorexception.42不是一个对象,它是一个数字typeof42//'num
我正在使用第三方Active-X控件,该控件需要在用户系统上安装特定版本的MFC42.dll。我正在尝试为我的产品的非管理员安装添加支持,并且必须安装例如mfc42.dll到系统文件夹并注册它显然使这不可能。第三方Active-X使用manifest文件作为免注册COM,想知道是否可以对MFC42.dll和MSVCRT.DLL做同样的操作,将它们存放在应用程序文件夹中?有人试过这个吗? 最佳答案 这是不可能的。MSVCRT和MFC42.dll不是COM对象,甚至不是win32程序集,因此不能使用无注册COM访问。您可以安装mfc42
我在连接到UART的嵌入式设备上使用RN42。波特率为115200(我尝试降低它但没有帮助。)我使用的是默认设置。每次当我将设备与PC配对时,我可以打开一个到远程设备的串行端口,但是一旦我关闭该端口,并尝试再次打开它,它将失败并显示“信号量超时错误”。如果我想恢复连接,我必须从PC上删除设备并重新添加,然后它会第一次工作并再次失败。有没有人有类似的问题或解决方案?如果您需要更多信息,请询问,我真的不知道在这种情况下要提供什么信息。在PC端,我有USB蓝牙设备并集成了一个。两者的行为相同。在嵌入式侧,RN42连接到AM3517的UART。我希望你能帮助我。问候,卢卡
我有一个win7x64系统(i3、nvidia卡),我想使用MySQLWorkbench,但在启动后它崩溃并显示以下消息:Problemsignature:ProblemEventName:APPCRASHApplicationName:MySQLWorkbench.exeApplicationVersion:5.2.42.9752ApplicationTimestamp:50243f32FaultModuleName:wbprivate.be.dllFaultModuleVersion:0.0.0.0FaultModuleTimestamp:50243a9eExceptionCode
在获得CreateProcess返回的句柄后,我调用TerminateProcess,为进程退出代码传递42。然后,我使用WaitForSingleObject终止进程,最后调用GetExitCodeProcess。函数调用均未报告错误。子进程是一个无限循环,不会自行终止。问题是,有时GetExitCodeProcess返回42作为退出代码(它应该如此),有时返回0。知道为什么吗?#include#include#include#include#includevoidcheck_call(boolresult,charconst*call);#defineCHECK_CALL(call
我正在尝试打开aproject在MacMavericks上的Monodevelop(3.0.5,启用了MonoMac插件)中。我收到这个错误:MonoDevelop.Projects.Formats.MSBuild.UnknownSolutionItemTypeException:Unknownsolutionitemtype:{42C0BBD9-55CE-4FC1-8D90-A7348ABAFB23};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}atMonoDevelop.Projects.Formats.MSBuild.MSBuildProjectH
Firefox推出了一项名为Trackingprotection的功能在v42.0中。它会阻止多个跟踪脚本,例如GoogleAnalytics、Marketo、LinkedIn等。我试图通过navigator.DoNotTrack检测它,但在两种情况下它都返回unspecified-在常规模式下浏览,在私有(private)模式下浏览-使用Firefox42.0在Mac上。由于navigator.DoNotTrack失败,我如何在JavaScript中检测用户是否正在查看启用了跟踪保护的网站? 最佳答案 navigator.dono