classSolution{ funmaxProfit(prices: IntArray): Int { val n = prices.size if (n <= 1) return0 var maxProfit = 0 var minPrice = prices[0] for (i in1 until n) { maxProfit = maxOf(maxProfit, prices[i] - minPrice) minPrice = minOf(minPrice, prices[i]) } return maxProfit } }
解法2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
classSolution{ funmaxProfit(prices: IntArray): Int { if (prices.isEmpty()) return0 val n = prices.size // dp[i][k]表示前i天持有和未持有第i天的股票的最大收益 val dp = Array(n) { IntArray(2) { 0 } } dp[0][0] = 0 dp[0][1] = -prices[0] for (i in1 until n) { // 第i天未持有,可能是前i-1天就未持有然后今天不操作,或者以前持有了今天卖出了 dp[i][0] = maxOf(dp[i - 1][0], dp[i - 1][1] + prices[i]) // 第i天持有,可能是前i-1天就持有了然后今天不操作,或者以前就未持有今天买入了 dp[i][1] = maxOf(dp[i - 1][1], -prices[i]) } return dp[n - 1][0] } }