LeetCode題庫解答與分析——#11.盛最多水的容器ContainerWithMostWater
阿新 • • 發佈:2019-02-18
#11 盛最多水的容器 Container With Most Water
給定 n 個正整數 a1,a2,...,an,其中每個點的座標用(i, ai)表示。 畫 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; };