11. Container With Most Water

来源:互联网 发布:淘宝的企业店铺卖手机 编辑:程序博客网 时间:2024/06/06 00:28

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.

一开始从左到右遍历,结果时间不够。

后来看网上的答案,发现时间复杂度可以是O(n)。从两边开始遍历。当前的容积为w*min(hl,hr), 以其他所有高度不超过min(hl,hr)的边的容器的容积不会超过当前值,因为底边的长度变短了。

public class Solution {    public int maxArea(int[] height) {        int max=0,left=0,right=height.length-1;        while(left<right){            int min=Math.min(height[left],height[right]);            max=Math.max(max,(right-left)*min);            while(height[left]<=min&&left<right){                left++;            }            while(height[right]<=min&&left<right)                right--;        }        return max;    }}


0 0
原创粉丝点击