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

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

https://www.nowcoder.com/practice/2fea2b0349df4f7689f6f5a882e4f129

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
      Scanner in = new Scanner(System.in);
        
        int n = in.nextInt();
        int[] nums = new int[n];
        for(int i = 0; i < n;i++){
            nums[i] = in.nextInt();
        }
        System.out.println(run(n,nums));
}
    public static int run (int n ,int[] nums){
        if(n == 0 || n == 1){
            return 0;
        }
        /** 两次买卖对应五种状态
          0     1    2   3     4
        无操作 买入 卖出 买入 卖出    卖出初始为-nums[0]
         */
        int[][] dp = new int[n][5];
        dp[0][1] = -nums[0];
        dp[0][3] = -nums[0];

        /** 
          这个就是买卖股票Ⅱ的延伸,卖出+ 买入-
         */
        for(int i = 1 ;i < n ;i++){
            dp[i][1] = Math.max(dp[i-1][1],-nums[i]);
            dp[i][2] = Math.max(dp[i-1][2],dp[i-1][1]+nums[i]);
            dp[i][3] = Math.max(dp[i-1][3],dp[i-1][2]-nums[i]);
            dp[i][4] = Math.max(dp[i-1][4],dp[i-1][3]+nums[i]);
        }
        return dp[n-1][4];
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务