LeetCode题解-Best Time to Buy and Sell Stock III
2015-07-11 16:22
399 查看
在Best Time to Buy and Sell Stock II基础上增加条件:两次交易的最大收益
思路一:将数组分为前后两部分,数组大小为size,记分隔符为i,分别求(0,i)以及(i+1,size-1)的最大收益(很一般的思路,没有过大数据关,主要是有太多重复计算),将收益相加,即为本次的最大值,依次迭代,即可获得最大收益。
思路二:分别计算正向收益(见Best
Time to Buy and Sell Stock)以及逆向收益,将相应收益相加,找最大收益。
代码1:
思路一:将数组分为前后两部分,数组大小为size,记分隔符为i,分别求(0,i)以及(i+1,size-1)的最大收益(很一般的思路,没有过大数据关,主要是有太多重复计算),将收益相加,即为本次的最大值,依次迭代,即可获得最大收益。
思路二:分别计算正向收益(见Best
Time to Buy and Sell Stock)以及逆向收益,将相应收益相加,找最大收益。
代码1:
int Profit(vector<int>& prices,const int& start,const int& end){ int minPrice=INT_MAX; int maxProfit=0; for (int i=start;i<=end;i++){ minPrice=min(prices[i],minPrice); int diff=prices[i]-minPrice; if(diff>maxProfit) maxProfit=diff; } return maxProfit; } int maxProfit(vector<int>& prices){ int size=prices.size(); if(size<=1) return 0; int sum=0; int max1,max2=0; for (int i=0;i<size;i++) { max1=Profit(prices,0,i); max2=Profit(prices,i+1,size-1); sum=max(max1+max2,sum); } return sum; }代码2:
<span style="font-family:KaiTi_GB2312;font-size:18px;">int Profit(vector<int> &prices) { int size=prices.size(); if(size <= 1) return 0; vector<int> maxFromLeft(prices.size(), 0); vector<int> maxFromRight(prices.size(), 0); int minPrice=INT_MAX; int maxProfit=INT_MIN; for(int i =0; i< size; i++) { minPrice=min(prices[i],minPrice); maxProfit=max(maxProfit,prices[i]-minPrice); maxFromLeft[i] = maxProfit; } int maxPrice=INT_MIN; maxProfit=INT_MIN; for(int i =size-1; i>=0; i--) { maxPrice=max(prices[i],maxPrice); maxProfit=max(maxProfit,maxPrice-prices[i]); maxFromRight[i] = maxProfit; } maxProfit = INT_MIN; for(int i =0; i< size-1; i++) { int sum = maxFromLeft[i] + maxFromRight[i+1]; maxProfit=max(sum,maxProfit); } if(maxProfit < maxFromRight[0]) maxProfit = maxFromRight[0]; return maxProfit; } </span>
相关文章推荐
- 每天一个linux命令(1):ls命令
- 认识shell
- 输入十个字符(可能是数字也可能是字母)然后输出
- PHP:快速排序法
- 进程状态
- 欢迎使用CSDN-markdown编辑器
- css3 web字体记
- nginx uwsgi django
- 树(基本概念及存储结构)
- tableau desktop(三)--构建数据视图(二)
- cpu绑定和cpu亲和性
- 下拉刷新,上拉装载许多其他ListView
- elasticsearch搜索类型简介
- HDU 1880 魔咒词典
- 主线程等待子线程结束
- Direct-X学习笔记--三维摄像机
- NS3网络仿真(3): NetAnim
- SQL SERVER 的排序规则
- 【Java】Java reflection
- 虚拟内存、物理内存