LeetCode Container With Most Water

来源:互联网 发布:淘宝搞笑夸张好评 编辑:程序博客网 时间:2024/04/29 21:39

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.


这一题的解题思路在于,其实不需要n^2的复杂度去遍历所有的左右边组合,只需要从两头网中间找,短边移动,碰到比该边大的边就计算容积是否满足大于原来容积的条件在,这样复杂度是n。

public class Solution {   public int maxArea(int[] height) {int i=0,j=height.length-1;int max=height[i]>height[j]?(height[j]*j):(height[i]*j);while(i<j){if(height[i]<height[j]){int l=height[i];while(height[i]<=l&&i<j)i++;int s=height[i]<height[j]?height[i]*(j-i):height[j]*(j-i);if(s>max)max=s;}else{int m=height[j];while(height[j]<=m&&i<j)j--;int s=height[i]<height[j]?height[i]*(j-i):height[j]*(j-i);if(s>max)max=s;}}return max;    }}