Question :
Say you have an array for which theithelement is the price of a given stock on dayi.
Design an algorithm to find the maximum profit. You may complete at mosttwotransactions.
Note:
You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).
for example: array[] = { 2, 5, 3, 8, 9, 4 } , maxProfit = (5-2) + (9-3) = 3 + 6 = 9.Anwser 1 :
class Solution {
public:
int maxProfit(vector<int> &prices) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (prices.size() == 0)
return 0;
vector<int> f1(prices.size());
vector<int> f2(prices.size());
int minV = prices[0];
f1[0] = 0;
for(int i = 1; i < prices.size(); i++)
{
minV = min(minV, prices[i]);
f1[i] = max(f1[i-1], prices[i] - minV);
}
int maxV = prices[prices.size()-1];
f2[f2.size()-1] = 0;
for(int i = prices.size() - 2; i >= 0; i--)
{
maxV = max(prices[i], maxV);
f2[i] = max(f2[i+1], maxV - prices[i]);
}
int sum = 0;
for(int i = 0; i < prices.size(); i++)
sum = max(sum, f1[i] + f2[i]);
return sum;
}
};
说明:
array[] = { 2, 5, 3, 8, 9, 4 }
f1[] = { 0, 3, 1, 6, 7, 2 } = { 0, 3, 3, 6, 7, 7 }
f2[] = { 7, 4, 6, 1, 0, 0 } = { 7, 6, 6, 1, 0, 0 }
max = { 7, 9, 9, 7, 7, 7 }
分享到:
相关推荐
java java_leetcode题解之Best Time to Buy and Sell Stock III.java
《最佳买卖股票时机II》是LeetCode中的一道经典编程题目,主要涉及动态规划和数组操作的知识点。在这个问题中,我们被赋予一个整数数组`prices`,表示某支股票每天的价格。任务是找到在允许进行多次交易的情况下,...
java java_leetcode题解之Best Time to Buy and Sell Stock with Cooldown
java java_leetcode题解之Best Time to Buy and Sell Stock IV.java
java java_leetcode题解之Best Time to Buy and Sell Stock II.java
java java_leetcode题解之Best Time to Buy and Sell Stock I.java
python python_leetcode题解之123_Best_Time_to_Buy_and_Sell_Stock_III
python python_leetcode题解121_Best_Time_to_Buy_and_Sell_Stock
javascript js_leetcode题解之123-best-time-to-buy-and-sell-stock-iii.js
leetcode LeetCode 解决题目的总数: 136/1753 微信公众号: 工程师Ruojhen 算法-动态规划 题号 名称 English Name 题解 53 最大子序和 Maximum Subarray 70 爬楼梯 Climbing Stairs 121 买卖股票的最佳时机 Best Time...
java lru leetcode leetcode-java leetcode刷题笔记 ...III 141.Linked List Cycle 142.Linked List Cycle II 188.Best Time to Buy and Sell Stock IV 217.Contains Duplicate 263.Ugly Number 264.Ugly Number II
python python_leetcode题解之122_Best_Time_to_Buy_and_Sell_Stock_II
javascript js_leetcode题解之121-best-time-to-buy-and-sell-stock.js
javascript js_leetcode题解之122-best-time-to-buy-and-sell-stock-ii.js
股票收益leetcode LeetCode 股票问题 Best Time to Buy and Sell Stock (Easy) 一次交易,找最大收益 for i in prices: low = min(low, i) profit = max(profit, i-low) Best Time to Buy and Sell Stock II (Easy) ...
- Best Time to Buy and Sell Stock III:存在多日限制交易,最多两次交易。 - Best Time to Buy and Sell Stock IV:与前三者不同,可能需要多次买入和卖出。 - Best Time to Buy and Sell Stock with Cooldown...
leetcode 分类 LeetCode LeetCode Java Solution 2018年5月31日 更新 最近刷了一遍 LeetCode,发现第一次的代码确实有些 low 很多代码并不简洁,本来1行的代码可以写成3行 思维混乱 没有按照题目类型分类 没有写结题...
63. 股票的最大利润题目链接Leetcode:121. Best Time to Buy and Sell Stock题目描述可以有一次买入和一次卖出,买入必
第一个问题是“Best Time to Buy and Sell Stock”(121题),题目要求找到一次买入和卖出股票的最好时机,使得收益最大化。解决这个问题的一种有效方法是使用线性扫描,遍历数组找到一个局部最小值作为买入点,再...