LeetCode刷题记录(第五天)

Trapping Rain Water

原题目:

Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.

翻译后:

给定n个非负整数来表示每个柱的宽度为1的高程图,计算下雨后它能够捕集多少水。

解释:

首先看到题后(翻译后的。。。。),我最想知道的就是:高程图是什么?

高程图:用来表示某一区域海拨高低(即高程)的图纸。。。。百度百科中只有这一句解释,大致知道了题目是什么意思,就是说这n个非负数代表高度,当下雨的时候可以有多少的积水。但是理解是理解了,并不是非常的形象,还不知道什么情况可以有积水,幸好还有一个事例。

事例:

例如,
给定[0,1,0,2,1,0,1,3,2,1,2,1],返回6

LeetCode刷题记录(第五天)_第1张图片

这下就直观多了,就是高度为数值,能积水多少就是看两个高度之间最低的了,有点像木桶原理。第一个和最后一个无论是多少,都无法积水,因为边上是空着的,所以主要还是从数组的[1]和[length()-2]来判断。、

思路:

我的想法是先找到最高的地方,也就是最大值,然后找出去它后的最大值,然后计算中间的面积,再减去中间包含的高度面积,最后知道找到最低的,把算出来的面积都相加起来,就是积水数量。但是按照我的思路,在实现的时候还是存在很多我无法解决的问题。而且需要进行很多次的判断,效率上非常低效,所以我还是学习了大神的代码:

public int trap(int[] A){
    int a=0;
    int b=A.length-1;
    int max=0;
    int leftmax=0;
    int rightmax=0;
    while(a<=b){
        leftmax=Math.max(leftmax,A[a]);
        rightmax=Math.max(rightmax,A[b]);
        if(leftmax

虽然有了答案,但是很多还是没有想明白,现在在这里我就不进行讲解了,明天会好好思考,附上详细的解释。

每天更新一道题,不是因为我懒,只做一道题,而是因为我现在还是个小白,现在在做一道题的时候我还需要去学习一些相关的知识,而且每天白天在实习上班,最近也比较忙,晚上回来还需要写毕业设计和论文,但是我还是会坚持学习更新博客的,天天这样真的感觉非常的充实,而且进步非常明显,所以我会继续努力,我相信有一天我可以做算法题做的得心应手的。


你可能感兴趣的:(算法)