题目描述

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

输入:[7, 1, 5, 3, 6, 4]
输出:5

虽然并没有用动态规划
dp[i]表示第i天卖出时能拿到最多的钱,此时肯定是当天的股票价格减去之前的股票价格的最小值时挣得最多
所以用min变量保存到第i天时股票的最小值
dp[i] = prices[i] - min
因为要求最大值,所以判断下哪天卖出价格最高,所以求dp数组的最大值

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        //dp[i]第i天卖能拿到的最多的钱
        vector<int> dp(prices.size(),0);
        int max=0,min=10001;
        for(int i=0;i<prices.size();i++){
            if(prices[i]<min) min=prices[i];//更新目前为止price最低的值
            dp[i]=prices[i]-min;//加入今天要卖,最大利润就是今天-之前最低的一天
            if(dp[i]>max) max=dp[i];//更新利润最高的值
        }
        return max;
    }
};