部分文章内容为公开资料查询整理,原文出处可能未标注,如有侵权,请联系我,谢谢。邮箱地址:gnivor@163.com ►►►需要气球么?请点击我吧!

LeetCode--11. Container With Most Water

题目大意,给定一个非负整形数组height[], 下标表示木板的位置,里面元素表示木板的长度。 要求从里面任意选出两块木板,使得围成的容器能够盛放的水的体积最大。

注意:容器的高是两块木板中较短的那个决定。

方法:假定容器两块木板为两侧的两块,左侧为i,右侧为j。
  在中间选取一块k,如果height[K]<=min(height[i],height[j]),那么height[k]不可能是构成容器的木板(距离一定小于j-i,且高度不够)
  因此我们从i与j较矮的那块木板开始向中间遍历。 如果height[k]比二者中矮的那块木板高,那么可能构成容器,计算体积,如果体积大于原来的体积,那么就更新体积。

public class Solution {
    public static void main(String args[]){
        //int[] height =  {4,6,2,6,7,11,2};
        int[] height =  {4,6,8,10,10,6,8,4};
        System.out.println(maxArea(height));
    }
public static int maxArea(int[] height) { int len = height.length; if(len==0||len==1) return 0; int v = 0; //记录最大容积 int i = 0 ; //记录起点 int j = len-1; //记录终点 while(i<j){ //从最左和最右开始计算 v = Math.max(v, Math.min(height[i],height[j])*(j-i)); //重新计算最大容积 if(height[i]<height[j]){ //左边是短板,则先从左边开始 int k = i; while(k<j&&height[k]<=height[i]) k++; i=k; }else{ //右边是短板,则从右边开始 int k = j; while(k>i&&height[k]<=height[j]) k--; j=k; } } return v; } }

 

posted @ 2015-07-15 15:18  流了个火  阅读(96)  评论(0)    收藏  举报
►►►需要气球么?请点击我吧!►►►
View My Stats