您的位置:首页 > 大数据 > 人工智能

leetcode--container_with_most_water

2016-10-24 12:38 309 查看

leetcode–container_with_most_water

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

分析:本题比较简单,采用动态规划方法求解,递推公式为x(i)=max(x(i−1),max(min(aj,ai)∗(i−j))(0≤j<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;
}
}


源程序下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 动态规划