-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
maxArea.cpp
44 lines (40 loc) · 1.05 KB
/
maxArea.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/**
* 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.
*/
#include <iostream>
#include <vector>
#include <limits>
int maxArea(std::vector<int>& height) {
size_t l = 0;
size_t r = height.size() - 1;
int maxAr = std::numeric_limits<int>::min();
while( l < r ) {
int curAr = ( std::min(height[l], height[r]) * ( r - l ));
if ( curAr > maxAr ) {
maxAr = curAr;
}
if ( height[l] < height[r]) {
l++;
} else {
r--;
}
}
return maxAr;
}
void printVec( std::vector<int> & vec ) {
std::cout << "Heights:";
for( auto v : vec ) {
std::cout << v << " ";
}
std::cout << std::endl;
}
int main()
{
std::vector<int> heights{ 4, 5, 1 };
printVec(heights);
std::cout << "Max possible area with above heights:" << maxArea(heights) << std::endl;
return 0;
}