了解雷特代码大多数水问题的代码片段

问题描述 投票:0回答:1

我在处理与Leetcode有关的水最多的集装箱

问题:

给出n个非负整数a1,a2,...,an,其中每个代表坐标(i,ai)上的一点。绘制n条垂直线,使得线i的两个端点位于(i,ai)和(i,0)。找到两行,它与x轴一起形成一个容器,这样该容器包含最多的水。

注意:您可能不会倾斜容器并且n至少为2。

问题链接:https://leetcode.com/problems/container-with-most-water

我偶然发现了此解决方案

var maxArea = function(height) {
    let res = l = 0, r = height.length - 1, cur;
    while (l < r){
        cur = Math.min(height[l], height[r]) * (r - l);
        if (cur > res){
            res = cur;
        } 
        height[l] <= height[r] ? l += 1: r -= 1;
    }
    return res;
};

在上面的代码中,我无法理解这两行

cur = Math.min(height[l], height[r]) * (r - l);

height[l] <= height[r] ? l += 1: r -= 1;

以及他们为什么要做height[r]) * (r - l)height[l] <= height[r] ? l += 1: r -= 1;

javascript
1个回答
0
投票

这是因为难题在于找到容纳最多水的容器。给定具有两个高度不同的容器的容器,水的区域被限制为较小的高度,因此cur (area) = minimum of (left height, right height) * length

下一步是遍历点的其余部分以找到更大的区域。因此,您必须停留在较高的一侧,而跳过较短的一侧,希望下一侧会更高以最大化面积。因此height[l] <= height[r] ? l += 1: r -= 1;等于if left height is less or equal than right height, left move by one, right remains. if right is less, right move by one (towards the center), left remains

这样做,此人正在寻找一对最高的高度,并且在完成x轴的遍历时,您将存储最大的面积。

© www.soinside.com 2019 - 2024. All rights reserved.