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
在计算第二个条件之前增加,这意味着您在两个条件下比较不同的数组项。
因此,在某些情况下两个条件都为真
力扣#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
在计算第二个条件之前增加,这意味着您在两个条件下比较不同的数组项。
因此,在某些情况下两个条件都为真