
求解思路
这道题我们从数组两端开始,用左右指针夹逼,每次计算当前能装多少水(面积等于两条线中较短的那条乘以它们的距离),然后更新最大值。
关键的问题是:
下一步该移动哪个指针?
答案是移动较矮的那一边。
为什么呢?
因为容器的容量由短板决定,如果我们移动高的那边,宽度变小了,而高度最多也只能维持原来的短板高度,面积只会更小;
但如果移动矮的那边,虽然宽度也变小了,但我们有可能遇到一条更高的线,从而突破原来的短板限制,获得更大的面积。
就这样一直移动较矮的一边,不断尝试找到更优的组合,直到左右指针相遇,这时我们就遍历了所有可能获得最大面积的情况。
代码实现
|
|
举个栗子
假设 height = [1, 8, 6, 2, 5, 4, 8, 3, 7]:
- 初始: l=0(高度1), r=8(高度7), 面积 = min(1,7) × 8 = 8
- 移动矮的(左): l=1(高度8), r=8(高度7), 面积 = min(8,7) × 7 = 49
- 移动矮的(右): l=1(高度8), r=7(高度3), 面积 = min(8,3) × 6 = 18
- 移动矮的(右): l=1(高度8), r=6(高度8), 面积 = min(8,8) × 5 = 40
- 继续移动…最终得到最大面积 49
如果觉得有帮助,欢迎点赞、关注、转发~