LeetCode42. 接雨水(提交未通过,但是我还没找到不通过的原因)

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};
   

    }
}

发布了36 篇原创文章 · 获赞 19 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/m0_37628958/article/details/105309198