2022-6-13 真题练习

MT10 股票交易日
 

描述

在股市的交易日中,假设最多可进行两次买卖(即买和卖的次数均小于等于 2 ),规则是必须一笔成交后进行另一笔(即买-卖-买-卖的顺序进行)。给出一天中的股票变化序列,请写一个程序计算一天可以获得的最大收益。请采用时间复杂度低的方法实现。

给定价格序列 prices 及它的长度 ,请返回最大收益。
 
数据范围: 1 \le n \le 500 \1n500  ,1 \le prices_i \le 1000 \1pricesi1000 
 1 import java.util.*;
 2 
 3 public class Stock {
 4     public int maxProfit(int[] prices, int n) {
 5         // write code here
 6         int[][][] dp=new int[n][2][3];
 7         for (int i=0;i<n;i++){
 8             for (int j=2;j>=1;j--){
 9                 if (i==0){
10                     dp[i][0][j]=0;
11                     dp[i][1][j]=-prices[i];
12                     continue;
13                 }
14                 dp[i][0][j]=Math.max(dp[i-1][0][j],dp[i-1][1][j]+prices[i]);
15                 dp[i][1][j]=Math.max(dp[i-1][1][j],dp[i-1][0][j-1]-prices[i]);
16             }
17         }
18         return dp[n-1][0][2];
19     }
20 }

思路:股票通用思路,dp[i][j][k] 第i天 j=0或1代表无或者有,k为交易次数。注意一个数的情况。

posted on 2022-06-13 19:29  阿ming  阅读(20)  评论(0编辑  收藏  举报

导航