Leetcode11. 盛最多水的容器(双指针)
Posted !0 !
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode11. 盛最多水的容器(双指针)相关的知识,希望对你有一定的参考价值。
题目链接:https://leetcode-cn.com/problems/container-with-most-water/
解题思路
这是一道非常经典的双指针题目。由于面积为Math.min(height[i], height[j]) * (j - i);我们可以发现如果每次必须使i或j往中间移动一步,那么我们肯定会让矮的一边往中间移,这样能使面积尽量变大(实际上比一定变大了,只是尝试使他变大)。
我们可以发现,如果已经确定了最大容积S(i,j),我们可以发现
- i左边和j右边肯定是比i,j的最小高度小的,如果比i,j最小高度高则最大容积则不可能是S(i,j);
- i,j之间的区间就算比i,j高但宽度没有i,j大
代码
class Solution {
public int maxArea(int[] height) {
int i = 0, j = height.length - 1;
int ans = 0;
while(i < j) {
ans = Math.max(ans, Math.min(height[i], height[j]) * (j - i));
if(height[i] < height[j])
i++;
else
j--;
}
return ans;
}
}
复杂度分析
- 时间复杂度:O(n)
- 空间复杂度:O(1)
以上是关于Leetcode11. 盛最多水的容器(双指针)的主要内容,如果未能解决你的问题,请参考以下文章