# 买卖股票的最佳时机 II

给你一个整数数组 prices ,其中 prices [i] 表示某支股票第 i 天的价格。

在每一天,你可以决定是否购买和 / 或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可

以先购买,然后在 同一天 出售。

返回 你能获得的 最大 利润

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

输出:49

解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色

部分)的最大值为 49。

输入:digits = "23"

输出:["ad","ae","af","bd","be","bf","cd","ce","cf"] 示例

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

输出:7

解释:在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出,这笔交易所能获

得利润 = 5 - 1 = 4 。

随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,这笔交易

所能获得利润 = 6 - 3 = 3 。

总利润为 4 + 3 = 7 。

public int maxProfit(int[] prices)
    {
        int sun = 0;
        for (int i = 1; i < prices.length; i++)
        {
            // 判断今天与明天的股票利润
            int temp = prices[i] - prices[i - 1];
            if (temp > 0)
            {
                sun += temp;
            }
        }
        return sun;
    }

思路:

  • 遍历整个股票交易日价格列表 price, 策略是所有上涨交易日都买卖,(赚到所有利润). 所有下降交易日都不买卖 (永不亏钱) 1. 设 tmp 为第 i-1 日买入与第 i 日卖出赚取的利润,即 tmp=prices [i] - prices [i-1] 2. 当该天利润为正 tmp>0. 则将利润加入总利润 profit, 当利润为 0 或为负,则直接跳过 3. 遍历完成后,返回总利润 profit