本文共 897 字,大约阅读时间需要 2 分钟。
题目:
只能买卖两次,而且最大手里只有一只股票。求最大利润。
解答:
参考:
代码:
/* 解释: 首先,因为能买2次(第一次的卖可以和第二次的买在同一时间),但第二次的买不能在第一次的卖左边。 所以维护2个表,f1和f2,size都和prices一样大。 意义: f1[i]表示 -- 截止到i下标为止,左边所做交易能够达到最大profit; f2[i]表示 -- 截止到i下标为止,右边所做交易能够达到最大profit; 那么,对于f1 + f2,寻求最大即可。 */ class Solution { public: int maxProfit(vector &prices) { int size = prices.size(); if (size == 0) return 0; vector f1(size); vector f2(size); int minV = prices[0]; f1[0] = 0; for (int i = 1; i < size; i++) { minV = min(minV, prices[i]); f1[i] = max(f1[i - 1], prices[i] - minV); } int maxV = prices[size - 1]; f2[size - 1] = 0; for (int i = size - 2; i >= 0; i--) { maxV = max(maxV, prices[i]); f2[i] = max(f2[i + 1], maxV - prices[i]); } int sum = 0; for (int i = 0; i < size; i++) { sum = max(sum, f1[i] + f2[i]); } return sum; } };
转载地址:http://pytsi.baihongyu.com/