leetcode Bllomberg面试题11. Container With Most Water

来源:互联网 发布:linux强制删除文件夹 编辑:程序博客网 时间:2024/05/29 14:25

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.

Note: You may not slant the container and n is at least 2.

题目链接

解决这个问题我们使用对撞指针,即维护[l...r]一个范围的数组,初始值[0,a.length-1],

 该思路的关键就是,如果a[l]<a[r]的话,那么l++,(如果r--的话那么得到的值一定会比之前小,l之前的元素也已经遍历过)

如果a[l]>a[r]的话,那么r--,(r之后的元素已经遍历过)

这样把这个数组遍历完就可找到最大值。

 public static int maxArea(int[] height) {  int max = 0;  int l = 0;  int r = height.length-1;//[0...r]的区间内对撞指针找最大值  while(l<r)  {  max = max(max,min(height[l],height[r])*(r-l));  if(height[l]>height[r])  r--;  else  l++;  }  System.out.println(max);        return max;    }  public static int max(int a,int b)  {  if(a>b)  return a;  return b;  }  public static int min(int a,int b)  {  if(a>b)  return b;  return a;  }




0 0