最近在LeetCode上面刷题,发现了一道有趣的题,以下是他的题目概述:
首先,我们通过分析题目了解他大概的问题和需求,其实当中最重要的是如何找到最大的面积,但是又不能以两个数据最大值的来计算,我们还要分析他的长与宽,话不多说,献上代码,里面有每一句的注释。
list = [1,8,6,2,5,4,8,3,7]
# 数组最左边的起始位置
left = 0
# 数组最右边的起始位置
right = len(list) - 1
# 初始化最大面积
max_area = 0
# 死循环走完每一个位置的数组
while left < right:
# 判断如果右边的值大于左边的值 高就为左边的否则反之 因为是注水问题,需要选择最短的那个条边
# 类似于木桶效应问题,如果不懂可以查看下方链接
height = list[left] if list[left] < list[right] else list[right]
# 计算面积公式 选出最大值
max_area = max(max_area,(right - left) * height)
# 判断数组中的值 如果左边的小于右边的那么左边的位置的加 1 否则反之
if list[left] < list[right]:
left += 1
else:
right -= 1
print(max_area
阅读链接 : 木桶效应
执行结果如下: