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 and n is at least 2.this
The above vertical lines are represented by array [1,8,6,2,5,4,8,3,7]. In this case, the max area of water (blue section) the container can contain is 49.spa
Example:code
Input: [1,8,6,2,5,4,8,3,7] Output: 49
JAVASCRIPT(這是log(n^2)的方法,還有很大的優化區間)orm
/** * @param {number[]} height * @return {number} */ var maxArea = function(numArr) { var h = '', w = '', tmp = 0, max = 0; for (var m = 0; m < numArr.length - 1; m++) { for (var n = m + 1; n < numArr.length; n++) { h = Math.min(numArr[m], numArr[n]); w = n - m; tmp = h * w; if (max < tmp) { max = tmp; } } } return max; };
JAVA(這是log(n)的方法)blog
/** * Container With Most Water * 盛最多水的容器 */ public class Solution { public int maxArea(int[] height) { int maxarea = 0, l = 0, r = height.length - 1; while (l < r) { maxarea = Math.max(maxarea, Math.min(height[l], height[r]) * (r - l)); if (height[l] < height[r]) l++; else r--; } return maxarea; } }