解题思路
1.全局贪心
默认全局差值为0
首先找到当前为止股票最低点
当前股票价值大于这个最小值,就可以更新全局差值,取最大值
    int maxProfit(vector<int>& prices) {
        // write code here
        int res = 0;
        int minVal = prices[0];
        for(int i=1;i<prices.size();i++){
            minVal = min(minVal,prices[i]);
            res = max(res,prices[i]-minVal);
        }
        
        return res;
    }

2.动态规划
正常来说dp需要一个数组,这里有两个状态就应该是二维数组。但是每个值只使用一次,所以两个变量就够了。
状态1:当前持有现金价值
状态2:当前持有股票价值
求:最后持有现金价值最大值

初始状态(第一天):
1.默认持有现金0元,没买股票
2.买股票,就是负债-prices[0]元。(借了这么多钱,买了股票,所以是负数)

状态更新:
1.第n天持有现金价值
    情况1:n-1天持有现金,维持现状
    情况2:  n-1天持有股票,变现(当天股价减去当前持有的股票)
    取两者最优(最大值)
2.第n天持有股票价值
    情况1:n-1天持有股票,维持现状
    情况2:  n-1天持有现金,购买股票(借钱买股票,负债-prices[i],注意这里只有一次购买机会,说明之前没有购买过股票)
    int maxProfit(vector<int>& prices) {
        // write code here
        int hasMoney = 0;
        int notHasMoney = -prices[0];
        for(int i=1;i<prices.size();i++){
            hasMoney = max(hasMoney,prices[i]+notHasMoney);
            notHasMoney = max(notHasMoney, -prices[i]);
        }
        
        return hasMoney;
    }