diff options
Diffstat (limited to 'works/solutions')
| -rw-r--r-- | works/solutions/cpp/11.cpp | 42 | 
1 files changed, 42 insertions, 0 deletions
diff --git a/works/solutions/cpp/11.cpp b/works/solutions/cpp/11.cpp new file mode 100644 index 0000000..44a8fd9 --- /dev/null +++ b/works/solutions/cpp/11.cpp @@ -0,0 +1,42 @@ +#include <vector>
 +#include <algorithm>
 +
 +using std::vector;
 +
 +class Solution
 +{
 +public:
 +    int maxArea(vector<int> &height)
 +    {
 +        auto left = height.cbegin();
 +        auto right = height.cend();
 +        --right;
 +
 +        int result = 0;
 +
 +        // although length could be calculated by right - left,
 +        // but this can be cached in register.
 +        int length = height.size() - 1;
 +
 +        while (left != right)
 +        {
 +            const int left_v = *left;
 +            const int right_v = *right;
 +            const int capacity = std::min(left_v, right_v) * length;
 +            result = std::max(capacity, result);
 +
 +            if (left_v < right_v)
 +            {
 +                ++left;
 +            }
 +            else
 +            {
 +                --right;
 +            }
 +
 +            length--;
 +        }
 +
 +        return result;
 +    }
 +};
  | 
