来源leetcode
方法1 暴力求解 两次for循环
下面展示一些 内联代码片
。
class Solution:
def maxArea(self, height: List[int]) -> int:
max_area = -99
for i in range(len(height)-1): #第一个到倒数第二个
for j in range(1, len(height), 1): #第二个到 最后一个
temp = (j-i) * min(height[i], height[j])
max_area = max(temp, max_area)
return max_area
这种办法用到了最常用的数组遍历方式,很重要。但是这种方法在python语言提交会超时,所以还要进行优化。
方法2 双指针,两个指针分别指向左右两边(第一和最后一个),然后向中间慢慢收敛即可。
class Solution:
def maxArea(self, height: List[int]) -> int:
max_area = -99
i, j = 0, len(height)-1
while i != j:
temp = (j-i) * min(height[i], height[j])
max_area = max(temp, max_area)
if height[i] > height[j]:
j -= 1
else:
i += 1
return max_area
向中间收敛的过程:判断两边的数据大小,哪个小移动那一边。