https://leetcode.com/problems/container-with-most-water/
很经典的贪心和2-pointer的问题,贪心需要想清楚更新条件以及验证是合理的,某种程度下,更难想到。

个人解答

  1. class Solution:
  2. def maxArea(self, h: List[int]) -> int:
  3. l, r = 0, len(h) - 1
  4. res = 0
  5. while l < r:
  6. val = min(h[l], h[r]) * (r - l)
  7. res = max(res, val)
  8. if h[l] > h[r]:
  9. r -= 1
  10. else:
  11. l += 1
  12. return res

题目分析

最大的面积,要么是宽度够大,要么是高度够大,可以先照顾宽度,然后逐渐缩小宽度寻找更高的宽度,这里边每次更新两边界高度更下的那个,保证了更新后的正确性,可以说是很巧妙了。