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

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

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

相关推荐

Noel_:中石油是这样的 哥们侥幸混进免笔试名单 一看给我吓尿了
点赞 评论 收藏
分享
1 1 评论
分享
牛客网
牛客企业服务