[LeetCode] Best Time to Buy and Sell Stock III
发布日期:2021-08-30 16:00:46 浏览次数:15 分类:技术文章

本文共 1918 字,大约阅读时间需要 6 分钟。

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.

Note:

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

解题思路

建立两个数组leftright,分别存储某个元素左边和右边所能获得的最大收益。即left[i]存储从[0, i]范围的最大收益;right[i]存储从[i, len - 1]范围的最大收益。

实现代码

/*****************************************************************    *  @Author   : 楚兴    *  @Date     : 2015/2/22 18:08    *  @Status   : Accepted    *  @Runtime  : 16 ms******************************************************************/#include 
#include
#include
using namespace std;class Solution {public: int maxProfit(vector
&prices) { int len = prices.size(); if (len == 0) { return 0; } vector
left(len, 0); vector
right(len, 0); int i = 0; int low = prices[0]; int profit = 0; while (i < len - 1) { if (prices[i] < low) { low = prices[i]; } else if (prices[i] >= prices[i + 1]) { profit = max(profit, prices[i] - low); } left[i] = profit; i++; } profit = max(profit, prices[i] - low); left[i] = profit; int high = prices[i]; profit = 0; while(i > 0) { if (prices[i] > high) { high = prices[i]; } else if (prices[i] <= prices[i - 1]) { profit = max(profit, high - prices[i]); } right[i] = profit; i--; } profit = max(profit, high - prices[i]); right[i] = profit; i = 0; int max_profit = 0; while (i < len) { max_profit = max(max_profit, left[i] + right[i]); i++; } return max_profit; }};int main(){ int num[] = { 1,2,3,4,5,6}; vector
n(num, num + sizeof(num)/sizeof(int)); Solution s; int profit = s.maxProfit(n); cout<
<

另一种解题思路可参考。

转载地址:https://blog.csdn.net/weixin_34038652/article/details/90622261 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:log4j中Pattern布局ConversionPattern详解
下一篇:从零开始学数据库(二)——select显示、where、%、排序、limit、distinct、count、max等、删和改...

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月08日 06时59分00秒