力扣原题《买卖股票的最佳时机 II》迭代法,纯手搓,例题已验证,边界未验证
给你一个整数数组 prices 其中 prices[i] 表示某支股票第 i 天的价格。在每一天你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。然而你可以在 同一天 多次买卖该股票但要确保你持有的股票不超过一股。返回 你能获得的 最大利润 。示例 1输入prices [7,1,5,3,6,4]输出7解释在第 2 天股票价格 1的时候买入在第 3 天股票价格 5的时候卖出, 这笔交易所能获得利润 5 - 1 4。随后在第 4 天股票价格 3的时候买入在第 5 天股票价格 6的时候卖出, 这笔交易所能获得利润 6 - 3 3。最大总利润为 4 3 7 。示例 2输入prices [1,2,3,4,5]输出4解释在第 1 天股票价格 1的时候买入在第 5 天 股票价格 5的时候卖出, 这笔交易所能获得利润 5 - 1 4。最大总利润为 4 。示例 3输入prices [7,6,4,3,1]输出0解释在这种情况下, 交易无法获得正利润所以不参与交易可以获得最大利润最大利润为 0。提示1 prices.length 3 * 1040 prices[i] 104我的答案classMaxProfit{intTryTransaction(vectorinttransactionNodes){intMaxGet0;//最大利润intbuyPrice0;intsum0;//买入一股buyPricetransactionNodes[0];transactionNodes.erase(transactionNodes.begin());//在某个点卖for(inti0;itransactionNodes.size();i){intsellPricetransactionNodes[i];vectorintcopyTransactionNodes(transactionNodes.begin(),transactionNodes.end());if(sellPricebuyPrice){//计算期望看继续持有还是售出boolallowSelltrue;intsellExpectationsellPrice-buyPrice;//售卖预期利润if(i1transactionNodes.size()){intnextSellExpectationtransactionNodes[i1]-buyPrice;if(nextSellExpectationsellExpectation){allowSellfalse;//需要持有}}if(allowSell){//售出sumsellPrice-buyPrice;if(copyTransactionNodes.size()1){copyTransactionNodes.erase(copyTransactionNodes.begin(),copyTransactionNodes.begin()i1);if(copyTransactionNodes.size()2){sumTryTransaction(copyTransactionNodes);//还存在买点进去买}}break;// 该段交易结束}}}if(sumMaxGet){MaxGetsum;}returnMaxGet;}public:intmaxProfit(vectorintprices){intmaxGet0;intmaxSum0;vectorinttransactions(prices.begin(),prices.end());for(inti0;itransactions.size();i){intmaxTempSumTryTransaction(transactions);if(maxTempSummaxSum){maxSummaxTempSum;}}if(maxSummaxGet){maxGetmaxSum;}returnmaxGet;}};intmain(){vectorvectorintprices;prices.push_back({7,1,5,3,6,4});//7prices.push_back({1,2,3,4,5});//4prices.push_back({7,6,4,3,1});//0MaxProfit maxProfit;for(vectorvectorint::iterator iterprices.begin();iter!prices.end();iter){std::cout最大利润为:maxProfit.maxProfit(*iter)std::endlstd::endl;}}