赞
踩
给定 n n n 个非负整数 a 1 , a 2 , . . . , a n a1,a2,...,an a1,a2,...,an,每个数代表坐标中的一个点 ( i , a i ) (i, ai) (i,ai) 。在坐标内画 n n n 条垂直线,垂直线 i i i 的两个端点分别为 ( i , a i ) (i, ai) (i,ai) 和 ( i , 0 ) (i, 0) (i,0)。找出其中的两条线,使得它们与 x x x 轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器,且 n n n 的值至少为 2 2 2。
图中垂直线代表输入数组 [ 1 , 8 , 6 , 2 , 5 , 4 , 8 , 3 , 7 ] [1,8,6,2,5,4,8,3,7] [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49 49 49。
示例:
输入: [1,8,6,2,5,4,8,3,7]
输出: 49
解:使用双指针:一个指向开始,一个指向末尾;使用变量 m a x a r e a maxarea maxarea记录当前所获得最大面积,并找出指针所指向的两条线段所形成的区域,更新 m a x a r e a maxarea maxarea,并将指向短线段的指针向另一指针移动
class Solution { public: int maxArea(vector<int>& height) { int i = 0, j = height.size() - 1; int maxarea = 0; while (i < j) { int h = min(height[i], height[j]); maxarea = max(maxarea, (j - i) * h); if (height[i] < height[j]) i++; else j--; } return maxarea; } };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。