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.
典型的双指针应用问题,令low = 0, high = len - 1,然后向中间靠拢,向中间靠拢意味着宽在减少,那为了使面积更加得大,唯一的可能是找到更高的高度。
class Solution {
public:
//双指针
int maxArea(vector<int>& height) {
int len = height.size();
if(len < 2)
return 0;
int low = 0, high = len - 1;
int max = -1;
while(low < high)
{
int tmpArea = (high - low) * min(height[low], height[high]);
max = (max < tmpArea) ? tmpArea : max;
if(height[low] <= height[high])
++low;
else
--high;
}
return max;
}
};
本文介绍如何使用双指针法解决经典的水桶问题,即在给定一组非负整数的情况下,找到两个垂直线形成的容器能装下最多的水量。通过在两端设置指针并逐步向内移动,实现效率优化。
449

被折叠的 条评论
为什么被折叠?



