-
Notifications
You must be signed in to change notification settings - Fork 0
/
best-time-to-buy-sell-stock3.cc
61 lines (60 loc) · 1.75 KB
/
best-time-to-buy-sell-stock3.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// class Solution {
// public:
// int maxProfit(vector<int>& prices) {
// if (prices.size() <= 1) return 0;
// int ret = 0;
// vector<int> res1 = vector<int>(prices.size(), 0);
// vector<int> res2 = vector<int>(prices.size(), 0);
// int buyPrice, sellPrice;
// int maxProf = 0;
// for(int i = 0; i < prices.size(); i++) {
// if (i == 0) buyPrice = prices[i];
// else {
// if (prices[i] > buyPrice) {
// if (prices[i] - buyPrice > maxProf) {
// maxProf = prices[i] - buyPrice;
// }
// } else if (prices[i] < buyPrice) {
// buyPrice = prices[i];
// }
// res1[i] = maxProf;
// }
// }
// maxProf = 0;
// for(int i = prices.size() - 1; i >= 0; i--) {
// if (i == prices.size() - 1) sellPrice = prices[i];
// else {
// if (prices[i] < sellPrice) {
// if (sellPrice - prices[i] > maxProf) {
// maxProf = sellPrice - prices[i];
// }
// } else if (prices[i] > sellPrice) {
// sellPrice = prices[i];
// }
// }
// res2[i] = maxProf;
// }
// for(int i = 0; i < prices.size(); i++) {
// if (res1[i] + res2[i] > ret) ret = res1[i] + res2[i];
// }
// return ret;
// }
// };
class Solution {
public:
int maxProfit(vector<int>& prices) {
int buy1, sell1, buy2, sell2;
for(int i = 0; i < prices.size(); i++) {
if (i == 0) {
buy1 = - 1 * prices[i];
sell1 = buy2 = sell2 = buy1;
} else {
buy1 = max(-1 * prices[i], buy1);
buy2 = max(sell1 - prices[i], buy2);
sell1 = max(buy1 + prices[i], sell1);
sell2 = max(buy2 + prices[i], sell2);
}
}
return max(0, max(sell1, sell2));
}
};