class Solution {
public:
int maxProfit(vector<int> &prices) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int n = prices.size();
if (n == 0) return 0;
vector<int> left(n);
vector<int> right(n);
int minVal = prices[0];
for (int i = 1; i < n; i++) {
minVal = min(minVal, prices[i]);
left[i] = max(left[i - 1], prices[i] - minVal);
}
int maxVal = prices[n - 1];
for (int i = n - 2; i >= 0; i--) {
maxVal = max(maxVal, prices[i]);
right[i] = max(right[i + 1], maxVal - prices[i]);
}
int ret = 0;
for (int i = 0; i < n; i++)
ret = max(ret, left[i] + right[i]);
return ret;
}
};
Small Case: 4ms
Large Case: 52ms
Time: O(n)
Space: O(n)