首页 > 其他 > 详细

leetcode -eleven:Container With Most Water

时间:2015-08-11 23:47:11      阅读:382      评论:0      收藏:0      [点我收藏+]

    Given n non-negative integers a1a2, ..., an, where each represents a point at coordinate (iai). n vertical lines are drawn such that the two endpoints of line i is at (iai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.

Note: You may not slant the container.

    大致意思就是从给定数组中取出任意两个数,作垂直于X轴的直线和X轴组成一个容器,求这个容器装满水最大的可能值。

解法一:直接采用遍历的方法,时间复杂度O(n2),提交上去超时

解法二:从两边往中间遍历,总是移动较小的那个边,时间复杂度O(n)。代码如下:

public class Solution {
    public int maxArea(int[] height) {
        int left=0,right=height.length-1;
        int max=0,w,h,index;
        
        while(left<right){
            w=right-left;
            h=height[left]>height[right]?height[right]:height[left];
            if(max<(w*h))
                max=w*h;
            if(height[left]<height[right]){
                index=left;
                index++;
                while (index<right && height[left]>=height[index])
                    index++;
                left=index;
            }else {
                index=right;
                index--;
                while (index>left && height[right]>=height[index] )
                    index--;
                right=index;
            }
        }
        return max;
    }
}


leetcode -eleven:Container With Most Water

原文:http://my.oschina.net/endeavour/blog/490950

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!