- 题目:给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
- 类型:无序数组找最佳边界
- 思路:01-分别从首尾开始,构造while循环;02-每次更新高度小的索引.原理是:这样才可能找到更大的容积值,并且每次移动都遵照这个原理.
- 经验:(1)双层for循环都可以考虑用双指针代替,涉及子串用滑动窗口,涉及有序或无序边界用前后指针,涉及遍历+记录用左右指针;
def maxArea(self, height: List[int]) -> int:
left,right=0,len(height)-1
max_v=0
while left<right:
v=min(height[left],height[right])*(right-left)
max_v=max(max_v,v)
if height[left]<=height[right]:left+=1
else:right-=1
return max_v
明日计划:
二分查找