题目描述
原题
Description:
Given n non-negative integers a1, a2, …, an , where each represents a point at coordinate (i, ai).
n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0).
Find two lines, which together with x-axis forms a container, such that the container contains the most water.Note:
You may not slant the container and n is at least 2.Example:
Input: [1,8,6,2,5,4,8,3,7]
Output: 49
Explanation:
原题翻译
描述:
给定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
解释:
解法一(Mine)
主要思想
得到可能出现的面积,求最大值。
运行速度:超过了16.18%的解答。
内存使用:超过了95.51%的解答。
源码
1 | class Solution { |
解法二
主要思想
仔细想想,解法一有什么问题?
在本题的例子中,第一条线高度为1,如果按照第一种解法运行,右边界需要从左往右遍历,依次求面积进行比较。但事实上,容器的高是由最短的线决定的,容器的面积毫无疑问地随右边界的增加而增加。我们真的有必要求出每块面积进行比较吗?
没错,这道题可以由一个标准的首尾指针法来解。
运行速度:超过了95.02%的解答。
内存使用:超过了100%的解答。
源码
1 | public class Solution { |