给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器,且 n 的值至少为 2。
图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。
题解:
1.一组非负整数序列表示柱高
2.从序列里找两个柱子,跟x轴最多能容纳多少
示例:
输入:[1,8,6,2,5,4,8,3,7]
输出:49
解题思路:
通过分析图示和例子不难看出
水的容量 = 较短的柱子的高度 * 两柱子之间的距离
所以找这两条线(柱子)问题很容易解决,很容易想到的思路就是暴力搜索,但是这样时间复杂度将上升到O(n^2)。
为降低时间复杂度,O(n)的思路是,头尾附设一个指针,头指针向后遍历,尾指针向前遍历,头尾指针相遇时停止遍历
C/C++题解:(点击蓝字阅读源码,或前往公众号回复“11”获取)
class Solution {
public:
int maxArea(vector<int>& height) {
Java题解:(点击蓝字阅读源码,或前往公众号回复“11”获取)
class Solution {
public int maxArea(int[] height) {
Python题解:(点击蓝字阅读源码,或前往公众号回复“11”获取)
class Solution(object):
def maxArea(self, height):
""":type height: List[int]:rtype: int"""
更多题解可前往公众号免费获取