[leetcode] 123. Best Time to Buy and Sell Stock III 解题报告
2016-06-11 03:40
621 查看
题目链接:https://leetcode.com/problems/best-time-to-buy-and-sell-stock-iii/
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).
思路:可以交易两次,因此可以记录一下两次买和两次卖之后的最大利润.如果只能交易一次很容易看出最优解是找到后面的价格与前面的价格最大差值.而如果可以交易两次的话,第二次交易将会依赖于第一次的结果,即第二次买下一个股票剩下的利润依赖于之前第一次卖掉股票之后的利润-当前股票价格.同理第二次卖掉一支股票之后剩下的利润依赖与第二次买下一支股票之后剩下的利润+当前股票价格.
代码如下:
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).
思路:可以交易两次,因此可以记录一下两次买和两次卖之后的最大利润.如果只能交易一次很容易看出最优解是找到后面的价格与前面的价格最大差值.而如果可以交易两次的话,第二次交易将会依赖于第一次的结果,即第二次买下一个股票剩下的利润依赖于之前第一次卖掉股票之后的利润-当前股票价格.同理第二次卖掉一支股票之后剩下的利润依赖与第二次买下一支股票之后剩下的利润+当前股票价格.
代码如下:
class Solution { public: int maxProfit(vector<int>& prices) { if(prices.size() ==0) return 0; int buy1 = INT_MIN, buy2 = INT_MIN, sell1 = 0, sell2 =0; for(auto price: prices) { buy1 = max(buy1, -price); sell1 = max(sell1, buy1+price); buy2 = max(buy2, sell1-price); sell2 = max(sell2, buy2+price); } return sell2; } };参考:https://leetcode.com/discuss/94392/clear-c-solution
相关文章推荐
- C++动态规划之最长公子序列实例
- C++动态规划之背包问题解决方法
- C#使用动态规划解决0-1背包问题实例分析
- 动态规划
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- C++ 动态规划
- leetcode----Longest Substring Without Repeating Characters
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02