买卖股票的最佳时机Ⅱ(峰谷法)

今天遇到了一个十分牛逼的算法
先把代码贴上来
题目在leetcode里

int maxProfit(int* prices, int pricesSize){
    int i = 0;
    int valley = prices[0];
    int peak = prices[0];
    int sum = 0;
    while(i < pricesSize-1){
        while(i<pricesSize-1 && prices[i] >= prices[i+1]){
            i++;
        }
        valley = prices[i];
        while(i<pricesSize-1 && prices[i] <= prices[i+1]){
            i++;
        }
        peak = prices[i];
        
        sum += peak-valley;
        
    }
    
    return sum;
}

我认为这个算法的牛逼之处在于找峰和找谷的操作
while(i<pricesSize-1 && prices[i] >= prices[i+1]){
i++;
}
这个while循环,在本元素大于后一个元素的时候,i就往后移动,当移动不了时,说明这就是个谷(比之前的都小,比后面的也都小)了,直接赋值valley = prices[i];
同理,找峰的操作也是一样
还有注意一个细节,这个算法里面只用了一个i,这保证了峰的下标一定比谷的下标大(因为我们做的是股票题,卖股的日期一定要大于买的日期)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值