1. 程式人生 > >LeetCode題庫解答與分析——#11.盛最多水的容器ContainerWithMostWater

LeetCode題庫解答與分析——#11.盛最多水的容器ContainerWithMostWater

#11 盛最多水的容器 Container With Most Water

給定 n 個正整數 a1a2,...,an,其中每個點的座標用(iai)表示。 畫 n 條直線,使得線 i 的兩個端點處於(i,ai)和(i,0)處。請找出其中的兩條直線,使得他們與 X 軸形成的容器能夠裝最多的水。

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.

注意:你不能傾斜容器,n 至少是2。

他人思路:

從兩邊向中間,比較兩線高度,每次都捨棄最短的並向中心移動一位,同時根據兩邊距離和最短邊高度得到面積。由於最短邊是每個長方形面積的決定因素,因而每次只挪動短邊的一端,直到兩端相遇。

程式碼(JavaScript):

/**
 * @param {number[]} height
 * @return {number}
 */
var maxArea = function(height) {
    var left = 0, right = height.length - 1;
	var maxArea = 0;

	while (left < right) {
		maxArea = Math.max(maxArea, Math.min(height[left], height[right]) * (right - left));
		if (height[left] < height[right])
			left++;
		else
			right--;
	}

	return maxArea;
};