题解 | #买卖股票的最好时机(二)#

买卖股票的最好时机(二)

http://www.nowcoder.com/practice/fbc5dad3e215457fb82a3ae688eb7281

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] prices = new int[n];
        for ( int i=0;i<n;i++){
            prices[i] = sc.nextInt();
        }
        int[][] dp = new int[n][2]; //可以理解为利润
        dp[0][0] = -prices[0]; //第一天买入
        dp[0][1] = 0;          //第一天卖出
        for ( int i=1; i<n; i++){
            //第i天买入的最佳策略是比较前一天买入或者前一天卖出现在买入的比较
            dp[i][0] = Math.max(dp[i-1][0],dp[i-1][1]-prices[i]);
            //第i天卖出的最佳策略是比较前一天买入现在卖出的利润或者前一天空仓的比较
            dp[i][1] = Math.max(dp[i-1][0]+prices[i],dp[i-1][1]);
        }
        System.out.println(dp[n-1][1]);
    }
}
全部评论
dp[n][0] 和dp[n][1]表示的状态描述不太准确呀(可以买,可以卖,也可以什么都不干)当天是否还持有股票这种描述应该更恰当
点赞 回复 分享
发布于 2022-03-02 15:56

相关推荐

牛客410815733号:这是什么电影查看图片
点赞 评论 收藏
分享
1 1 评论
分享
牛客网
牛客企业服务