给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/container-with-most-water 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
时间: 2023-05-26 21:03:38 浏览: 152
盛最多水的容器 给定一个长度为 n 的整数数组 height
双指针法
首先我们可以想到暴力枚举两条线段,计算它们能组成的最大容量,但这样的时间复杂度为 $O(n^2)$,因此需要考虑更快的方法。
考虑容器的面积受限于两条线段的高度和它们之间的距离,因此我们可以从两端分别选出一条线段,计算它们能组成的最大容量,然后将短的那条线段向内移动,再次计算容量,以此类推,直到两条线段相遇为止。
因为向内移动短线段不会使容器的宽度变大,而容器的高度又受限于短线段,因此向内移动长线段只会使容器的容量更小,因此我们每次移动短线段,以期望能够在较少的比较次数内找到最大的容量。
时间复杂度:$O(n)$
Python 代码
阅读全文