diff options
| author | crupest <crupest@outlook.com> | 2020-05-14 21:52:45 +0800 | 
|---|---|---|
| committer | crupest <crupest@outlook.com> | 2020-05-14 21:52:45 +0800 | 
| commit | 69e591089d5c64ee7b5958663be97cda74d7a1cd (patch) | |
| tree | d419f4b9643a6cc4524dac672aa7f10a8e33be67 /works/solutions/cpp | |
| parent | f16de1095aff8395eba87d0ec0edccddcdae4257 (diff) | |
| download | crupest-69e591089d5c64ee7b5958663be97cda74d7a1cd.tar.gz crupest-69e591089d5c64ee7b5958663be97cda74d7a1cd.tar.bz2 crupest-69e591089d5c64ee7b5958663be97cda74d7a1cd.zip  | |
import(solutions): Add problem 11 .
Diffstat (limited to 'works/solutions/cpp')
| -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;
 +    }
 +};
  | 
