LeetCode 123: Best Time to Buy and Sell Stock 3 解题与思考
来源:互联网 发布:索金十数据官网 编辑:程序博客网 时间:2024/06/06 03:11
LeetCode 123: Best Time to Buy and Sell Stock 3 解题与思考
[原题链接]
题目描述
这次你只能买两次,依旧需要先抛掉手上的才能买下一只,求最大利润
思路
可以先将数列切割成两部分,我在左边获得的最大利润加上右边的最大利润,其最大值则为所求。
也就是说可以变成两个LeetCode 121求解。
不过要注意的是直接调用121的函数会超时,所以还要稍微作修改。
我们在121中使用的是从左到右扫,记录股票价格最小值min以及最大利润
对于右半边,我们对应的,建立数组
最后,最大利润满足
算法
1、初始化最大利润
2、顺序扫描整个数组;当扫到一个新的数
- 若
ai−min>PA ,则PA=ai−min - 若
ai<min ,则min=ai
3、将
4、初始化最大利润
5、逆序扫描整个数组;当扫到一个新的数
- 若
max−ai>PB ,则PB=max−ai - 若
ai>max ,则max=ai
6、将
7、计算
P即为所求
代码
#include <iostream>#include <vector>using namespace std;class Solution {public: int maxProfit(vector<int>& prices) { if ( prices.size() == 0 ) return 0; vector<int> A, B; int P = 0; int Ptemp, m; Ptemp = 0; m = prices[0]; for ( auto i = prices.begin(); i != prices.end(); i++ ) { int profit = *i - m; if ( Ptemp < profit) Ptemp = profit; if ( *i < m ) m = *i; A.push_back(Ptemp); } Ptemp = 0; m = prices.back(); for ( auto i = prices.end() - 1; i >= prices.begin(); i-- ) { int profit = m - *i; if ( Ptemp < profit ) Ptemp = profit; if ( *i > m ) m = *i; B.push_back(Ptemp); } int n = prices.size(); for ( int i = 0; i < n; i++ ) { int profit = A[i] + B[n - 1 - i]; if ( P < profit ) P = profit; } return P; }};
思考
毕竟是hard的题目,对时间的要求方面还是需要相当严谨的
阅读全文
0 0
- LeetCode 123: Best Time to Buy and Sell Stock 3 解题与思考
- LeetCode 121: Best Time to Buy and Sell Stock 解题与思考
- LeetCode 122: Best Time to Buy and Sell Stock 2 解题与思考
- LeetCode-Best Time to Buy and Sell Stock-解题报告
- 【LeetCode】Best Time to Buy and Sell Stock 解题报告
- LeetCode 123: Best Time to Buy and Sell Stock III
- LeetCode: Best Time to Buy and Sell Stock III [123]
- LeetCode 123 Best Time to Buy and Sell Stock III
- [leetcode 123] Best Time to Buy and Sell Stock III
- leetcode || 123、Best Time to Buy and Sell Stock III
- leetcode-123 Best Time to Buy and Sell Stock III
- leetcode 123: Best Time to Buy and Sell Stock III
- 123 Best Time to Buy and Sell Stock III [Leetcode]
- Best Time to Buy and Sell Stock III - LeetCode 123
- LeetCode 123: Best Time to Buy and Sell Stock III
- LeetCode 123 Best Time to Buy and Sell Stock III
- LeetCode 123 -- Best Time to Buy and Sell Stock III
- Leetcode 123 Best Time to Buy and Sell Stock III
- Linux中添加硬盘并挂载
- Java参数在方法中的传递
- [题解] NOIP2015 货车运输(最大生成树+LCA)
- Python基础(六)
- 39.Oracle杂记——Oracle常用动态视图v$sysstat
- LeetCode 123: Best Time to Buy and Sell Stock 3 解题与思考
- 高性能MySQL:第一章 MySQL架构与历史
- 怎么查看Oracle是11g还是10g
- 深入理解android Handler机制
- TensorFlow官方文档中文版-笔记(一)
- 通讯概念(二)arp,rarp,icmp,网关,DHCP
- su命令,sudo命令,限制root用户的远程登录
- android crash自动化分析
- 40.Oracle杂记——Oracle常用动态视图v$session_wait