股票交易。获得最大利润问题、

217 篇文章 0 订阅
174 篇文章 2 订阅

本题源自leetcode  121-123

-------------------------------------------------------

1 只可以交易一次,求最大的利润


思路1 用俩个变零来标记最便宜的价格,和最大的利润。

代码:

 int maxProfit(vector<int>& prices) {
        int maxPro=0;
        int minPrice=INT_MAX;
        for(int i=0;i<prices.size();i++){
            minPrice=min(minPrice,prices[i]);
            maxPro=max(maxPro,prices[i]-minPrice);
        }
        return maxPro;
    }

2 可以交易多次,但每次买入前,一定要把之前的卖出

思路:遍历数组,求出每相邻的俩个价格差

代码:

 int maxProfit(vector<int>& prices) {
        int pro=0;
        for(int i=1;i<prices.size();i++)
            pro += max(prices[i]-prices[i-1],0);
        return pro;
    }


3  只能交易俩次。求最大的利润

思路:

代码

 int maxProfit(vector<int>& prices) {
        int b1=INT_MIN;
        int b2=INT_MIN;
        int s1=0,s2=0;
        for(int i : prices){
            s2=max(s2,b2+i);  //第二次出售获利
            b2=max(b2,s1-i);  //第二次买入
            s1=max(s1,b1+i);  //第一次出售
            b1=max(b1,-i);
        }
        return s2;
    }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值