aboutsummaryrefslogtreecommitdiff
path: root/works
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-09-20 22:59:35 +0800
committercrupest <crupest@outlook.com>2020-09-20 22:59:35 +0800
commit1d364bcad49ccd341ba68ad4c31c4b0636a9cab9 (patch)
treec182c2f9722efd2f881d5124c132db23efaead98 /works
parent56711685015cefea7406a04a6a7c7555e42ee8c8 (diff)
downloadcrupest-1d364bcad49ccd341ba68ad4c31c4b0636a9cab9.tar.gz
crupest-1d364bcad49ccd341ba68ad4c31c4b0636a9cab9.tar.bz2
crupest-1d364bcad49ccd341ba68ad4c31c4b0636a9cab9.zip
import(solutions): Add problem 123 .
Diffstat (limited to 'works')
-rw-r--r--works/solutions/cpp/123.cpp34
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});
+ }
+};