题目:
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.
题意:数组中的每个数对应一条线段的长度,索引对应x坐标,两个索引可以组成一个底部的宽,高度就是前面所说的线段的长度,而既然是要盛水,高度就是两个线段中较短的一个。
思路:暴力O(n^2)解法超时,考虑头尾双指针一次遍历。
代码:
class Solution {
public:
//O(n)两端指针向中间靠拢,查找最大面积,稳得不行
int maxArea(vector<int>& height) {
int Area=0, MaxArea=0, left=0, right=height.size()-1;
while(left < right){
Area = min(height[left],height[right])*(right-left);
MaxArea = max(Area, MaxArea);
// 高度较低的一个指针向中间移动,相等条件下左指针移动
if(height[left]>height[right]) right--;
else left++;
}
return MaxArea;
}
};