leetcode: Best Time to Buy and Sell Stock III
来源:互联网 发布:阿里妈妈淘宝客赚钱 编辑:程序博客网 时间:2024/06/07 17:17
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).
先用dp[i]表示当前下标之前最低价格,再把dp[i]变成当前下标前最大利润,其实这可以一次循环做完; O(n)
然后从后遍历prices如果i到n-1的最大利润加dp[i]大于(相当于两次交易)结果,更新结果max_sum;O(n)
总的时间复杂度O(n)
class Solution {public: int maxProfit(vector<int> &prices) { if( prices.size() < 2) return 0; vector< int> dp( prices.size(), INT_MIN); dp[0] = prices[0]; for( int i = 1; i < prices.size(); ++i){ dp[i] = min( dp[i-1], prices[i]); } for( int i = 0; i < dp.size(); ++i){ dp[i] = prices[i] - dp[i]; } int max_sum = dp[dp.size()-1];//两次交易最大的和 int high_price = prices[prices.size()-1];//i到n-1最大价格 int max_part = 0;//i到n-1最大利润 for( int i = prices.size() - 2; i >= 0; --i){ int tmp_max_part = high_price - prices[i];//临时i到n-1最大利润 max_part = max_part > tmp_max_part ? max_part : tmp_max_part; int tmp_max_sum = max_part + dp[i];//临时两次交易最大的和 max_sum = max_sum > tmp_max_sum ? max_sum : tmp_max_sum; high_price = high_price > prices[i] ? high_price : prices[i];//更新i到n-1最大价格 } return max_sum; }};
0 0
- LeetCode Best Time to Buy and Sell Stock III
- LeetCode Best Time to Buy and Sell Stock III
- [Leetcode] Best Time to Buy and Sell Stock III
- leetcode 16: Best Time to Buy and Sell Stock III
- LeetCode Best Time to Buy and Sell Stock III
- [LeetCode] Best Time to Buy and Sell Stock III
- leetcode 62: Best Time to Buy and Sell Stock III
- [LeetCode] Best Time to Buy and Sell Stock III
- 【leetcode】Best Time to Buy and Sell Stock III
- LeetCode - Best Time to Buy and Sell Stock III
- LeetCode之Best Time to Buy and Sell Stock III
- [LeetCode]Best Time to Buy and Sell Stock III
- LeetCode: Best Time to Buy and Sell Stock III
- [Leetcode]Best Time to Buy and Sell Stock III
- [leetcode]Best Time to Buy and Sell Stock III
- leetcode题目:Best Time to Buy and Sell Stock III
- [LeetCode] Best Time to Buy and Sell Stock III
- LeetCode-Best Time to Buy and Sell Stock III
- 使用真机测试时,在eclipse中data文件夹打不开
- mysql 外键约束举例
- Java获取数据库各种查询结果
- Heap-sort
- 深入理解Magento – 第七章 – 自定义Magento系统配置
- leetcode: Best Time to Buy and Sell Stock III
- sublime下配置Python开发环境
- 编辑文章 - 博客频道 - CSDN.NET
- RandomAccessFile【2】
- 模式匹配KMP
- nand2tetris【2】
- startup_stm32f10x_xx.s 启动代码文件选择
- 深入理解Magento – 第六章 – 高级Magento模型
- ubuntu12.04 安装配置jdk1.7