LeetCode 11. Container With Most Water
一、問題描述:
Given n non-negativeintegers a1, a2, ..., an, where each represents a point atcoordinate (i, ai). n verticallines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which togetherwith x-axis forms a container, such that the container contains the most water.
Note: You maynot slant the container and n is at least 2.
二、問題分析:
根據問題描述,大致分析需求為:在a1, a2, ..., an中找出兩個元素,不妨設為ai和aj。通過這兩個元素構獲得四個點(i, ai)、(i, 0)、(j, aj)和(j, 0)。在座標系上分別連線(i, 0)和(j, 0)、(i, 0)和(i, ai)、 (j, 0)和(j, aj) 構造出以一個開口向上的二維容器,大致影像如下:
容器的容量由兩個因素決定:
1. i和j的距離;
2. ai和aj的最小值;
容量大小公式為:|i-j| * min{ai, aj}
那麼,這樣就可以把問題簡化為:給定一個包含n個整數(a1, a2, ..., an)的列表。要求找出兩個元素ai和aj,滿足|i-j| * min{ai, aj} 為最大值。
三、演算法設計:
1. 初始化最大容量max = 0,分別定義a = 0, b = len(l)
2. 當a < b 時,迴圈執行以下操作:
從給定的列表l兩頭開始往列表中部遍歷,每次記錄temp = min{l[a],l[b]} * (b – a),比較temp與max的大小。如果temp > max,則max = temp。
若l[a] > l[b],則b = b-1;
反之,則a = a + 1;
3. 返回的max即為最大容量
原理:
因為從列表的兩頭往中間遍歷即能保證每次兩個元素的下標之差是最大的,且不會重複計算。因為容量由兩個元素資料的最小值決定,所以在每次記錄完只需要將較小的一個元素進行替換,替換出現兩種情況:①更新元素後容器的容量比未更新的小,但是這對記錄的最大容量不產生影響;②更新元素後的容器容量比未更新的大,此時就會更新記錄的最大容量。這樣設計的優點是可以避免計算包含有較小元素的容量計算,這是因為針對一個特定的元素,由於較大或較小兩個元素是往中間靠攏的距離,所以更新較大或較小的元素與另一個特定的元素組合的距離是一樣的,因此包含較小元素的容器容量一定比包含有較大元素的容器容量小。
四、程式實現:
class Solution:
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
n = len(height)
a = 0
b = n-1
max = 0
while(a < b):
temp = (b-a)*min(height[a], height[b])
if( temp > max):
max = temp
if (height[a] < height[b]):
a+=1
else:
b-=1
return max
相關文章
- LeetCode - Medium - 11. Container With Most WaterLeetCodeAI
- Leetcode 11 Container With Most WaterLeetCodeAI
- leetcode_11. Container With Most WaterLeetCodeAI
- LeetCode Container With Most Water(011)解法總結LeetCodeAI
- Leetcode Trapping Raining waterLeetCodeAPPAI
- Leetcode 42 Trapping Rain WaterLeetCodeAPPAI
- LeetCode 42. Trapping Rain WaterLeetCodeAPPAI
- 【Leetcode】1673. Find the Most Competitive SubsequenceLeetCode
- [LeetCode] 417. Pacific Atlantic Water FlowLeetCode
- [LeetCode] 2070. Most Beautiful Item for Each QueryLeetCode
- Leetcode 之 PHP 解析 (42. Trapping Rain Water)LeetCodePHPAPPAI
- [leetCode]11. 盛最多水的容器LeetCode
- 【LeetCode】11. 盛最多水的容器LeetCode
- 【LeetCode Hot 100】11. 盛最多水的容器LeetCode
- Save Water
- The most influential person
- [Most.js] Create Streams From Single Values With Most.jsJS
- leetcode 417. Pacific Atlantic Water Flow 太平洋大西洋水流問題LeetCode
- C. Mixing Water
- Trapping-rain-waterAPPAI
- H. The Most Reckless Defense
- Traceback (most recent call last):AST
- LeetCode 1326. Minimum Number of Taps to Open to Water a Garden 動態規劃 離散化 貪心LeetCode動態規劃
- 【Lintcode】1484. The Most Frequent Word
- 508-Most Frequent Subtree Sum
- Container on AWSAI
- Container & MicroserviceAIROS
- 2.3.7 Container MapsAI
- The Buffalo Bills may be the third most popular team in their nation
- 11.死鎖(deadlocks)
- 11.《開工天物》
- 11. webpack配置VueWebVue
- flutter Container的decorationFlutterAI
- 什麼是MOST商業分析技術?
- 11. 名稱空間
- 11.物件導向(3)物件
- 11. 串列埠通訊串列埠
- SAP ABAP ALV 的一些總結:Custom container 和 Splitter containerAI