lintcode-medium-Container with Most Water
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; } }

浙公网安备 33010602011771号