Day6||买卖股票的最佳时机 III

题目:
给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
思路:
通过暴力循环,能解题,但用时过长

class Solution {
public:    
int maxProfit(vector<int>& prices) 
{    
if(prices.size()<=1)    
return 0;    
int i,j,b1=prices[0],b2=prices[prices.size()-1],a=0;    
for(i=0;i<prices.size()-1;i++)    
{        
if(prices[i]>=b1&&i!=0)        
continue;        
else        
b1=prices[i];        
for(j=prices.size()-1;j>i;j--)        
{            
if(prices[j]<=b2&&j!=prices.size()-1)            
continue;            
else            
b2=prices[j];            
if(prices[j]-prices[i]>a)            
a=prices[j]-prices[i];            
int b3=i+1;            
for(int m=i+1;m<j-1;m++)            
{                
if(prices[m]<=b3&&m!=i+1)                
continue;                
else                
b3=prices[m];                
int n=m+1;                
while(n<j){                
if(prices[j]-prices[n]-prices[i]+prices[m]>a)                
a=prices[j]-prices[n]-prices[i]+prices[m];                
n++;                
}            }        }    }    
return a;     
}};

看了别人的解答,学到了新的东西

class Solution {
public:    
int maxProfit(vector<int>& prices) 
{    
int a=prices.size();    
if(a<=1)    
return 0;   
 vector<int> f(a,0);   
  int b=0;    
  int pmin=prices[0];    
  int pmax=prices[a-1];    
  for(int i=1;i<a;i++)    
  {        
  f[i]=max(f[i-1],prices[i]-pmin);        
  pmin=min(pmin,prices[i]);    
  }    
  int c=f[a-1];    
  for(int i=a-2;i>=0;i--)    
  {        
  b=max(b,pmax-prices[i]);        
  c=max(c,f[i]+b);        
  pmax=max(pmax,prices[i]);    
  }    
  return c;    }};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值