Best Time to Buy and Sell Stock III

Description:

Say you have an array for which the ith element is the price of a given stock on day i.

Design an algorithm to find the maximum profit. You may complete at most two transactions.

Example

Given an example [4,4,6,1,1,4,2,5], return 6.

Note

You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).

Solution:

class Solution {
public:
	/**
	 * @param prices: Given an integer array
	 * @return: Maximum profit
	*/
	int maxProfit(vector<int> &prices) {
		auto sz = (int)prices.size();
		if (sz == 0) return 0;
		vector<int> vec1(sz, 0);
		vector<int> vec2(sz, 0);
		int m1 = prices[0];
		int m2 = prices[sz-1];
		for (int i = 1; i < sz; ++i) {
			m1 = min(m1, prices[i]);
			vec1[i] = max(prices[i]-m1, vec1[i-1]);
			m2 = max(m2, prices[sz-1-i]);
			vec2[sz-1-i] = max(m2-prices[sz-1-i], vec2[sz-i]);
		}
		int rc = 0;
		for (int i = 0; i < sz; ++i) {
			rc = max(rc, vec1[i]+vec2[i]);
		}
		return rc;
	}
};
posted @ 2015-09-11 03:49  影湛  阅读(98)  评论(0)    收藏  举报