CodeACM
HOT 100 · 双指针 · LC 11

盛最多水的容器:ACM 模式刷题

按标准输入读取测试数据,输出结果后可在 CodeACM 在线运行和提交。

题目描述

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

说明:你不能倾斜容器。

输入格式

第一行包含一个整数 n,表示竖线数量。

第二行包含 n 个非负整数 height[i],相邻数字以空格分隔。

输出格式

输出一个整数,表示容器能够盛水的最大面积。

数据范围

  • 2 ≤ n ≤ 10⁵
  • 0 ≤ height[i] ≤ 10⁴

公开样例

样例 1

输入

9
1 8 6 2 5 4 8 3 7

输出

49

选择下标 1 和 8 的竖线,面积为 min(8, 7) × (8 − 1) = 49。

样例 2

输入

2
1 1

输出

1

两条竖线之间的宽度为 1,高度为 1。

练习建议

先根据输入输出格式写出可运行程序,再用公开样例检查结果;遇到边界情况时,补充自测用例后提交。