#include <iostream>
#include <vector>
#include<algorithm>
#include <queue>
using namespace std;
/************************************************************************/
/*
Problem:
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.
Author : crazys_popcorn@126.com
DateTime: 2017年8月2日 15:42:24
*/
/************************************************************************/
class Solution {
public:
int maxArea(vector<int>& height)
{
#if 0 //暴力 算法。。不合格. 超时了 //已经注释
if(height.size()<2)
{
return 0;
}
int _max_Area = 0;
int _size = height.size();
int _max = 0;
for (int i = 0; i<_size;i++)
{
for (int j = i + 1; j < _size; j++)
{
int distance = j - i;
if (height[i] > height[j])
{
_max_Area = height[j] * distance;
}
else
{
_max_Area = height[i] * distance;
}
if (_max_Area > _max)
{
_max = _max_Area;
}
}
}
return _max;
#endif
if (height.size() < 2)
{
return 0;
}
int max_Area = 0;
int _start = 0;
int _end = height.size() - 1;
while (true)
{
if (_start == _end)
{
break;
}
if (height[_start] > height[_end])
{
(_end - _start)*height[_end] > max_Area ? (max_Area = (_end - _start)*height[_end]) : 0;
--_end;
}
else
{
(_end - _start)*height[_start] > max_Area ? (max_Area = (_end - _start)*height[_start]) : 0;
++_start;
}
}
return max_Area;
}
};
void main()
{
vector<int>_height = { 2,1 };
Solution s1;
std::cout << s1.maxArea(_height) << std::endl;
system("pause");
}
LeetCode Container With Most Water C++
最新推荐文章于 2024-08-15 05:02:54 发布