From 69e591089d5c64ee7b5958663be97cda74d7a1cd Mon Sep 17 00:00:00 2001 From: crupest Date: Thu, 14 May 2020 21:52:45 +0800 Subject: import(solutions): Add problem 11 . --- works/solutions/cpp/11.cpp | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 works/solutions/cpp/11.cpp (limited to 'works/solutions/cpp/11.cpp') 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 +#include + +using std::vector; + +class Solution +{ +public: + int maxArea(vector &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; + } +}; -- cgit v1.2.3