diff options
author | crupest <crupest@outlook.com> | 2020-09-20 22:59:35 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2020-09-20 22:59:35 +0800 |
commit | 3f552fd2413d75d3113d09bfc6d4ab7a1c999c67 (patch) | |
tree | f2f4a0f6c235e07141ed8a0139dc8ff6440146c2 | |
parent | 75ea9d9f86aceaabb4d54df53c8831fd843afa6c (diff) | |
download | solutions-3f552fd2413d75d3113d09bfc6d4ab7a1c999c67.tar.gz solutions-3f552fd2413d75d3113d09bfc6d4ab7a1c999c67.tar.bz2 solutions-3f552fd2413d75d3113d09bfc6d4ab7a1c999c67.zip |
Add problem 123 .
-rw-r--r-- | cpp/123.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/cpp/123.cpp b/cpp/123.cpp new file mode 100644 index 0000000..f4feff2 --- /dev/null +++ b/cpp/123.cpp @@ -0,0 +1,34 @@ +#include <vector> +#include <iostream> +using std::vector; + +#include <algorithm> + +class Solution +{ +public: + // 0 -> after buy for the first time + // 1 -> after sell for the first time + // 2 -> after buy for the second time + // 3 -> after sell for the second time + + int maxProfit(vector<int> &prices) + { + int day_count = prices.size(); + + int state_0 = -prices[0]; + int state_1 = 0; + int state_2 = -prices[0]; + int state_3 = 0; + + for (int day = 1; day < day_count; day++) + { + state_0 = std::max(state_0, -prices[day]); + state_1 = std::max(state_1, state_0 + prices[day]); + state_2 = std::max(state_2, state_1 - prices[day]); + state_3 = std::max(state_3, state_2 + prices[day]); + } + + return std::max({state_0, state_1, state_2, state_3}); + } +}; |