LeetCode高频面试60天打卡日记Day35(接雨水)

Day35(接雨水)

在这里插入图片描述

class Solution {
    
    
    public int trap(int[] height) {
    
    
        //***************暴力解法******************
        int ans = 0;
        //从第二个柱体遍历到倒数第二个柱体
        for(int i=1;i<height.length-1;i++){
    
    
            int leftMax = 0;
            int rightMax = 0;
            for(int j=0;j<=i;j++){
    
    
                leftMax = Math.max(leftMax,height[j]);
            }
            for(int k=i;k<height.length;k++){
    
    
                rightMax = Math.max(rightMax,height[k]);
            }
            ans += Math.min(leftMax,rightMax)-height[i];
        }
        return ans;
        
        //*****************dp解法********************
        int n = height.length;
        int ans = 0;
        if(n==0){
    
    
            return 0;
        }
        int[][] dp = new int[n][2];
        //dp[i][0] dp[i][1] 表示第i柱子左右两边的最大高度(包括当前柱子高度)
        dp[0][0] = height[0];
        dp[n-1][1] = height[n-1];
        //填充柱子左边高度所有情况
        for(int i=1;i<n;i++){
    
    
            dp[i][0] = Math.max(dp[i-1][0],height[i]);
        }
        for(int j=n-2;j>=0;j--){
    
    
            dp[j][1] = Math.max(dp[j+1][1],height[j]);
        }
        for(int k=0;k<n;k++){
    
    
            ans += Math.min(dp[k][0],dp[k][1])-height[k];
        }
        return ans;
    }
}

猜你喜欢

转载自blog.csdn.net/YoungNUAA/article/details/105319336
今日推荐