LeetCode 011 Container With Most Water

题目


给出一个数组,每个元素(非负)代表高,计算两个元素和坐标围成的水桶最多能装满多少水。


思路


1 题目很容易理解错误,特别是做了大量这类题目之后。

2 理解清楚题目之后,明白任意个水桶只和 a 这两个元素的最小的那个 b 这两个元素的坐标差值有关。

3 假设元素同样大小,那么最多的时候,是选取最远的两个坐标。

4 当不相同的时候,可以慢慢把坐标接近,替换最小的那个边。看看是不是有可能产生一个更大更高的水桶。

5 能够完成上面思路,代码就容易写出来了。


代码


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

15.3.17
重新做的时候,想到为什么不用while而用if做坐标移动。1,2,4,3这组就能解释,每次移动都要考虑一下可能性。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值