2016年10月19日星期三

11. Container With Most Water

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.


local max = (j - i) * Math.min(h[j],h[i]);

因此,乘号两边任何一个参数变大,都可能有最大值

如果我们从左往右扫,j-i 是一定在增大,无论后边那个参数如何变化,都有肯能其中一个端点,因此这么做的复杂度是O(n^2)

如果用两个指针从两边向中间走,那么可以保证左边参数一定是在减小的!!(控制变量)

因此只需要Math.min(h[j],h[i]) 增大即可找到最大值。

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

没有评论:

发表评论