Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) 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; } }
时间: 2024-10-23 07:47:32