[LeetCode]题解(python):011-Container With Most Water
題目來源:
https://leetcode.com/problems/container-with-most-water/
?
題意分析:
? ? ? 給出一個n長度的非0數組,a1,a2,……,an,ai代表在坐標i上的高度為ai。以以ai,aj為高,i到j為底,可以構造出一個容器。那么求出這些容器中可以裝的水的最大容積(容器不能傾斜)。例如數組[2,1],一共可以構造1個容器,這個容器的四個端點坐標是(0,0),(0,2),(1,1),(1,1),那么他可以裝的最大的水容積是(1-0)*1 = 1.
?
題目思路:
? ?? 我們不難發現,水容積的大小是由短高度決定的。暴力的方法就是把所有的容器找出來,算出他們的水容積,一一比較,然后得到最大值,這種方法的時間復雜度是(O(n^2))。很明顯會TLE。
? ? ? ?我們認真研究一下尋找過程,我們從第一個高度為起始容器壁,那么我們直接以最后一個高度為終止壁,如果a1 <= an,那么以a1為起始的容器最大是a1 * (n - 1),以a1為容器壁的最大容器計算出來的。那么以a1為壁的所有情況不需要再考慮,接著考慮a2的;同理,如果a1?> an,an不再考慮,考慮an-1,這有點類似"夾逼定理"。比較ai和aj(i<j)如果ai <= aj,i++;否者j ++直到i == j。這個算法的時間復雜度是(O(n))。
?
代碼(python):
?
1 class Solution(object): 2 def maxArea(self, height): 3 """ 4 :type height: List[int] 5 :rtype: int 6 """ 7 size = len(height) # the size of height 8 maxm = 0 # record the most water 9 j = 0 10 k = size - 1 11 while j < k: 12 if height[j] <= height[k]: 13 maxm = max(maxm,height[j] * (k - j)) 14 j += 1 15 else: 16 maxm = max(maxm,height[k] * (k - j)) 17 k -= 1 18 return maxm View Code?
?
?
轉載請注明出處:http://www.cnblogs.com/chruny/p/4817787.html
?
轉載于:https://www.cnblogs.com/chruny/p/4817787.html
總結
以上是生活随笔為你收集整理的[LeetCode]题解(python):011-Container With Most Water的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ember.js 入门指南——handl
- 下一篇: MyBatis 之 动态SQL