腾讯10-盛最多水的容器leetcode11
不是dp的题目,
而是o(n),滑动窗口,类似二分的题目,
i从n的最小值开始增大,j从n的最大值开始减小,这种也是o(n)的算法
利用i++,j++比较面积大小
当nums[i]小于nums[i],增大i
反之减小j,继续比较面积。
为什么这样做,因为,先考虑最大范围,然后不断抽掉那么小的那个值,即抽掉最短的短板,再寻找最优。
class Solution:
def maxArea(self, height: List[int]) -> int:
res=0
i,j=0,len(height)-1
while(i<j):
res=max(res,min(height[i],height[j])*(j-i))
if height[i]<height[j]:
i+=1
else:
j-=1
return res