力扣:买卖股票的最佳时机 II(c++)

Posted 解忧杂活铺子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了力扣:买卖股票的最佳时机 II(c++)相关的知识,希望对你有一定的参考价值。

题目:

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。


解:

思路:

关键点是找出哪一天买进和哪一天卖出。

只有当下一天比今天的股价高,今天的才可买入,下一天的股价小于今天的,今天的才可卖出。又因为得先买入才可卖出,呈现出先上升后下降的趋势,进行一次买入和卖出的操作,取当次交易利润最大化。在将整个股价分成若干个这样的小组。将每次最大化利润相加,即为最大利润。下图中看出有两次先升后降的趋势,故进行两组买入卖出交易。

1:买1卖5    利润 5-1 = 4   

     

2:买3卖6    利润 6-3 = 3           


总利润:4+3 = 7

代码:

// 左:前一天 中:今天 右:下一天 int maxProfit(vector<int>& prices) { int i = 0; int sum = 0; // 总利润 if (prices.size() == 1 || prices.size() == 0) return 0; if (prices.size() == 2) return (prices[1] - prices[0]) > 0 ? prices[1] - prices[0] : 0; for (int j = 1;j < prices.size();j++) { if (prices[i] < prices[j] && j == prices.size() - 1) { sum = sum + prices[j] - prices[i]; // 中 - 左  } else if (prices[i] < prices[j] && prices[j + 1] < prices[j]) // 确定当前股 左< 中 > 右 买左,卖中 { sum = sum + prices[j] - prices[i]; // 中 - 左  i = j + 1; // i 跳到 右上,继续 左中右 j = j + 1; // j 跳到 此时 i 的中上  } else if (prices[i] >= prices[j]) i = i + 1; } return sum;}


以上是关于力扣:买卖股票的最佳时机 II(c++)的主要内容,如果未能解决你的问题,请参考以下文章

力扣 No.122 买卖股票的最佳时机 II

力扣 No.122 买卖股票的最佳时机 II

力扣题解 122th 买卖股票的最佳时机 II

力扣题解 122th 买卖股票的最佳时机 II

力扣算法JS LC [53. 最大子数组和] LC [122. 买卖股票的最佳时机 II]

LeetCode 0122.买卖股票的最佳时机 II