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 | 1d364bcad49ccd341ba68ad4c31c4b0636a9cab9 (patch) | |
| tree | c182c2f9722efd2f881d5124c132db23efaead98 /works/solutions | |
| parent | 56711685015cefea7406a04a6a7c7555e42ee8c8 (diff) | |
| download | crupest-1d364bcad49ccd341ba68ad4c31c4b0636a9cab9.tar.gz crupest-1d364bcad49ccd341ba68ad4c31c4b0636a9cab9.tar.bz2 crupest-1d364bcad49ccd341ba68ad4c31c4b0636a9cab9.zip | |
import(solutions): Add problem 123 .
Diffstat (limited to 'works/solutions')
| -rw-r--r-- | works/solutions/cpp/123.cpp | 34 | 
1 files changed, 34 insertions, 0 deletions
| diff --git a/works/solutions/cpp/123.cpp b/works/solutions/cpp/123.cpp new file mode 100644 index 0000000..f4feff2 --- /dev/null +++ b/works/solutions/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}); +    } +}; | 
