Leetcode——121. 买卖股票的最佳时机

在这里插入图片描述
首先大家第一印象应该是暴力嘻嘻,不妨从后向前看,依次比较,维护一个最大值。但是时间复杂度为O(n^2)

class Solution 
{
public:
    int maxProfit(vector<int>& prices) 
    {
        int length=prices.size();
        int max=0;
        for(int i=length-1;i>=1;i--)
        {
            for(int j=i-1;j>=0;j--)
            {
                if((prices[i]-prices[j])>max)
                {
                    max=prices[i]-prices[j];
                }
            }
        } 
        return max;      
    }
};

第二个思路就是动态规划了。
首先计算一个diff数组,意义为diff【i】=prices【i+1】-prices【i】。
比较序列中差值最大的情况,即为累加diff。
此时需要注意如果累加和小于0,则就要置为0(实际意义为不进行交易)
时间复杂度降为O(n)

class Solution 
{
public:
    int maxProfit(vector<int>& prices) 
    {
        int length=prices.size();
        if(length==0||length==1)
        {
            return 0;
        }
        int diff[length-1]={0};
        for(int i=0;i<length-1;i++)
        {
            diff[i]=prices[i+1]-prices[i];
        }
        int profit=0;
        int temp=0;
        for(int i=0;i<length-1;i++)
        {
            temp=max(0,diff[i]+temp);
            profit=max(temp,profit);
        }
        return profit;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值