股票问题

记录【今天之前买入的最小值】
计算【今天之前最小值买入,今天卖出的获利】,也即【今天卖出的最大获利】
比较【每天的最大获利】,取最大值即可

class Solution {
    public int maxProfit(int[] prices) {
        if(prices.length <= 1)
            return 0;
        int min = prices[0], max = 0;
        for(int i = 1; i < prices.length; i++) {
            max = Math.max(max, prices[i] - min);
            min = Math.min(min, prices[i]);
        }
        return max;
    }
}


动态规划

```cpp
int maxProfit(int* prices, int pricesSize){
    int i,temp=0,result=0;
    for(i=1;i<pricesSize;++i)
    {
        temp+=prices[i]-prices[i-1];
        if(temp<0)
        {
            temp=0;
        }
        if(temp>result)
            result=temp;
    }
    return result;
}
暴力方法

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


哨兵方法

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int ans=0;
        vector<int> St;
        prices.emplace_back(-1);
        for(int i=0;i<prices.size();++i)
            while(!St.empty&&St.back()>prices[i])
                ans=std::max(ans,St.back()-St.front());//保护最大值
                St.pop_back()
            St.emplace_back(prices[i]);
        return ans;
    }
};

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读