题目
思路分析
题目要求:求由2个hight[i],hight[j]高度,围成的能容纳的最大水量。
- 两层循环,暴力破解。
代码展示
def maxArea(self, height):
maxwater = 0
i = 0
while i<len(height):
j = i+1
while j<len(height):
minhigh = height[i] if height[i]<=height[j] else height[j]
water = minhigh*(j-i)
if water>maxwater:
maxwater = water
j+=1
i+=1
return maxwater
思路分析(改进)
思路
参考博客
使用贪心算法
避免使用2次循环,只使用一次遍历
从2端往里面缩减,保存更新最大值。
代码展示(改进)
class Solution:
def maxArea(self, height):
i = 0 #最左
j = len(height)-1 #最右
maxwater = 0
while i<j:
water = min(height[i],height[j])*(j-i)
if height[i]<height[j]: #短板往中间移
i+=1
else:
j-=1
maxwater = max(maxwater,water)
return maxwater
if __name__ == "__main__":
a = Solution()
print(a.maxArea([1,8,6,2,5,4,8,3,7]))