2022-6-13 真题练习
描述
在股市的交易日中,假设最多可进行两次买卖(即买和卖的次数均小于等于 2 ),规则是必须一笔成交后进行另一笔(即买-卖-买-卖的顺序进行)。给出一天中的股票变化序列,请写一个程序计算一天可以获得的最大收益。请采用时间复杂度低的方法实现。
给定价格序列 prices 及它的长度 n ,请返回最大收益。
数据范围: 1 \le n \le 500 \1≤n≤500 ,1 \le prices_i \le 1000 \1≤pricesi≤1000
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为交易次数。注意一个数的情况。