Leetcode #11 盛水最多的容器:为什么必须使用 'else'

Leetcode #11 Container With Most Water: Why have to use 'else'

力扣#11 装最多水的容器

https://leetcode.com/problems/container-with-most-water/

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

请注意,您不能倾斜容器。

我的代码是:

class Solution {
    public int maxArea(int[] height) {
        int l=0, r=height.length-1;
        int ans=0;
        while(l<r){
            int area= Math.min(height[l],height[r])*(r-l);
            ans=Math.max(ans,area);
            if(height[l]<=height[r]){
                l++;
            }
            if(height[l]>height[r]){
                r--;
            }
        }
        return ans;
    }
}

然而正确答案是:

class Solution {
    public int maxArea(int[] height) {
        int l=0, r=height.length-1;
        int ans=0;
        while(l<r){
            int area= Math.min(height[l],height[r])*(r-l);
            ans=Math.max(ans,area);
            if(height[l]<=height[r]){
                l++;
            }
            else{
                r--;
            }
        }
        return ans;
    }
}

它们之间唯一的不同是我使用 if(height[l]>height[r]) 而不是 else

但是使用我的代码, 输入:[1,8,6,2,5,4,8,3,7] 输出:40 预期:49

我不知道为什么,它们之间有什么区别。

请注意,如果第一个条件有效,则变量 l 在计算第二个条件之前增加,这意味着您在两个条件下比较不同的数组项。 因此,在某些情况下两个条件都为真