LeetCode 121 买卖股票的最佳时机

Leetcode 121 买卖股票的最佳时机

给定一个数组nums,其中每个数字num表示第i天的股票价格。要求同一天内最多只能进行一次交易(买入/卖出)且只能买入/卖出各一次,求能够获得的最大利润。
动态规划
思路:

  • 第i天卖出能够获得的利润 = 第i天股票价格 - 前i天的最低价格(min_i)
  • 到第i天为止的最大利润 = 第i天的利润 和 前i-1天的最大利润中的最大值
  • dp[i]表示到第i天为止的最大利润,则dp[i] = max(nums[i]-min_i, dp[i-1])
  • 初始状态dp[0] = 0, dp[1] = 0
public class Solution {
    public int maxProfit(int prices[]) {
        if(prices==null || prices.length==0) {
            return 0;
        }
        int min_i = prices[0];      //到第0天为止的最低价格
        int[] dp = new int[prices.length];
        for(int i=1; i<dp.length; i++) {
            min_i = Math.min(min_i, prices[i]);      //更新到第i天为止的最低价格
            dp[i] = Math.max(dp[i-1], prices[i]-min_i);
        }
        
        return dp[prices.length-1];
    }
}
原文地址:https://www.cnblogs.com/CodeSPA/p/13509205.html