Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai)
. nvertical 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.
Given [1,3,2]
, the max area of the container is 2
.
思路:
用左右两个指针向中间移动,记录任一时刻的截面积,如果比之前的结果大,就更新结果
当左边高度大于右边事,如果移动左边,则接下来的结果不会大于现在的结果,所以要移动右边,反之亦然,结论是总是移动高度较小的边
public class Solution { /** * @param heights: an array of integers * @return: an integer */ public int maxArea(int[] heights) { // write your code here if(heights == null || heights.length == 0) return 0; int left = 0; int right = heights.length - 1; int result = 0; while(left < right){ int area = (right - left) * Math.min(heights[left], heights[right]); if(area > result) result = area; if(heights[left] > heights[right]) right--; else left++; } return result; } }