[LeetCode]Best Time to Buy and Sell Stock II

今天写的是贪婪算法里面一个很简单的题:Best Time to Buy and Sell Stock II

122 Best Time to Buy and Sell Stock II 46.3% Easy
题目描述是这样的:

Say you have an array for which the ith element is the price of a given stock on day i.

Design an algorithm to find the maximum profit. You may complete as many transactions as you like (ie, buy one and sell one share of the stock multiple times). However, you may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).

输入是一个数列,一个描述第i天卖出stock的价格,要求的是最大收益。可以买,也可以卖,但是在卖之前必须先买进来。

那这样就很简单了,我们只要每两天之间存在第二天的价格高于第一天的价格就可以把差价加入收益里面,这样就可以得到最大化的利益了。

为什么呢?假设数列如下:1,2,4,5,3,7  那么我们会把1和2之间的差价加入profit,然后是2和4的差价,4和5的差价,最后是3和7的差价。为什么我们可以把1和2的差价还有2和4的差价都加进去呢,其实这么想就可以了,我们在第一天买入,那么我们第二天不卖,第三天才卖,那利益不就一样了吗。至于后面的3和7也很好理解,花了3买再7卖出去,差价是4,也就是收益了。

当然了,如果数列长度只有1,那肯定是没得赚了orz

代码如下:

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


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值