leetcode--container_with_most_water

leetcode–container_with_most_water

题意:给定n个非负整数a1,a2,…,an,其中每个表示在坐标(i,ai)的一个点。 有n条垂直绘制的线,使得线的两个端点i是在(i,ai)和(i,0)。找到两条线,其与X轴一起形成了一个容器,使得所述容器包含最多的水。

分析:本题比较简单,采用动态规划方法求解,递推公式为 x(i)=max(x(i1),max(min(aj,ai)(ij))(0j<i) x(i) 表示前i个line能包含最多的水,该递推式时间复杂度是 O(n2) (好像还有更简单的方法,我也没仔细想)
代码:用的迭代而非递归(怕栈溢出)

public int maxArea(int[] height){
        int length = height.length;
        if(length == 0){                //如果height没有值,返回面积最大为0
            return 0;
        }else if(length == 1){          //如果height只有一个值,返回最大面积为0
            return 0;
        }else{                          //如果height有两个及以上的值
            int result_max = Math.min(height[0], height[1]);        //最终返回的结果
            for(int i=2; i < length; i++){
                int temp_max = 0;       //用于保存嵌套循环中的最大值
                for(int j = 0; j < i; j++){
                    int temp = Math.min(height[j], height[i])*(i - j);
                    if(temp > temp_max){
                        temp_max = temp;
                    }
                }
                if(temp_max > result_max){
                    result_max = temp_max;
                }
            }
            return result_max;
        }
    }

源程序下载

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值