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.java
Note: You may not slant the container.數組
大體意思就是從給定數組中取出任意兩個數,做垂直於X軸的直線和X軸組成一個容器,求這個容器裝滿水最大的可能值。spa
解法一:直接採用遍歷的方法,時間複雜度O(n2),提交上去超時code
解法二:從兩邊往中間遍歷,老是移動較小的那個邊,時間複雜度O(n)。代碼以下:orm
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; } }