42.接雨水
我是按照行,层层向上,来求雨水体积
提交记录
314 / 315 个通过测试用例
最后一个用例,我先通过本地调一下,结果发现,idea直接报代码过长
那个用例数据实在太长了。我把他贴在我的CSDN代码,结果吧CSDN卡死了
用例数据感兴趣的可以看看,随便支出这个算法为什么通过不了
代码
package com.java.leetcode;
import org.w3c.dom.ls.LSOutput;
import java.util.ArrayList;
import java.util.List;
class Solution {
public int trap(int[] height) {
//长度为0直接返回
if (height.length<=1)
return 0;
//来自题解的思路 按行求
//先求高度为1的行有多少水,然后求高度为2的行有多少水,直到最高点(其实到第二高就够了,但是我不想写排序的判断)
//早出最高点
int highMax = 0;
for (int value : height) {
if (highMax < value) highMax = value;
}
//如果最高为0,返回0
if (highMax ==0) return 0;
//水的容量
int waterSum = 0;
//从第一层遍历到最高层
//i是高度
for (int i= 1; i <= highMax; i++){
//存储不小于当前层数的下标
List<Integer> list = new ArrayList<>();
for (int j = 0; j<height.length;j++){
if (height[j] >= i){
list.add(j);
}
}
//有两个数据的高度超过了层数才有能装水
if (list.size()>1){
//我只需要去第一个和最后一个的下标算出容积,再减去被柱子本身占据的体积
waterSum += (list.get(list.size() - 1) + 1 - list.get(0)-list.size());
}
}
return waterSum;
}
}
public class Question42 {
public static void main(String[] args) {
int[] h1 = {1,0,3,500};
}
}