为什么 DP 解决方案不起作用,截留雨水?

时间:2021-04-01 20:27:39

标签: java algorithm

给定 n 个非负整数表示高程图,其中每个条的宽度为 1,计算下雨后它可以收集多少水。

示例: 输入:高度 = [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 说明:上面的高程图(黑色部分)用数组[0,1,0,2,1,0,1,3,2,1,2,1]表示。在这种情况下,有 6 个单位的雨水(蓝色部分)被困。

**Constraints**:

n == height.length
0 <= n <= 3 * 104
0 <= height[i] <= 105

这个问题是它在输入为 [2,0,2] 时输出 0 但代码应该将索引 1 设置为 leftMax 为 2 和 rightMax 为 2 所以 2-0=2应该是输出

class Solution {
    public int trap(int[] height) {
        
        if(height == null || height.length == 0){
            return 0;
        }
        
        int ans = 0;
        int size = height.length;
        
        int[] leftMax = new int[size];
        int[] rightMax = new int[size];
        
        leftMax[0] = height[0];
        for(int i = 1; i < size; i++){
            leftMax[i] = Math.max(leftMax[i-1],height[i]);
        }
        
        rightMax[0] = height[size-1];
        for(int i = size-2; i >= 0; i--){
            rightMax[i] = Math.max(rightMax[i+1],height[i]);
        }
        
        for(int i = 1; i < size-1; i++){
            ans+= Math.min(leftMax[i],rightMax[i])-height[i];
        }
        return ans;
    }
}

2 个答案:

答案 0 :(得分:1)

问题是你的 @GetMapping(path = "test") public Single<String> test() throws Exception { final Mono<ContextView> contextMono = Mono.deferContextual(Mono::just); return RxJava3Adapter.monoToSingle( contextMono.flatMap(ctx -> Mono.just(ctx.get("my-context")))); } 初始化是错误的,它在“错误的一边”初始化。它初始化可能从 rightMax 部分复制的 [0]。但是 leftMax 然后从左边迭代, rightMax 从右边迭代,因此最右边的索引应该被初始化。请注意,您已经使用正确的 leftMax 索引进行了初始化,但是对于错误的 rightMax - 它应该如下所示:

height

这在以前是有效的,因为非常正确的(可能)不是集水器的一部分,因此它的错误值没有任何影响。但在非常简单的 2,0,2 情况下,它是陷阱的一部分,并且弄乱了结果。

现在代码正确地计算了两个给定的样本:

rightMax[size-1] = height[size-1]

答案 1 :(得分:0)

您第一次从顶峰到背面进行实验并购买最高塔 here 的费用,这是您在完成每一行时尚未遇到的。

相关问题