leetcode11-盛最多水的容器
题目描述
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:你不能倾斜容器。

题目解答
这道题使用的是贪心算法,使用了双指针
思路比较难想,代码很简单
首先,我们让距离最远的两条线成为容器壁
随后,找到高度较小的线,向内找到相邻的下一条线
记录最大值,直到两条线重合
十分的简单o((>ω< ))o
细节
为什么可以采用双指针呢(⊙_⊙)?
假定左指针不移动,只向左移动右指针
这样是不是容器的容量只会变小不会变大啊!
好吧......
假如右指针变大了,但是左指针没有变
而二者的距离变小了
所以容量变小了
假如右指针变小了,距离也变小了
容量当然变小了
现在让两个指针都动起来
如果挪动大的,那么只能变小
但是如果挪动小的,有可能变大
代码
复杂度分析
时间复杂度:O(n)
空间复杂度:O(1)