121. 买卖股票的最佳时机

  1. int[][]dp=new int[2][prices.length];
  2. dp[0][0]=-prices[0];
  3. for(int i=1;i<prices.length;i++){
  4. dp[0][i]=Math.max(dp[0][i-1],-prices[i]);
  5. dp[1][i]=Math.max(dp[1][i-1],dp[0][i-1]+prices[i]);
  6. }
  7. return dp[1][prices.length-1];

122. 买卖股票的最佳时机 II

  1. int[][]dp=new int[2][prices.length];
  2. dp[0][0]=-prices[0];
  3. for(int i=1;i<prices.length;i++){
  4. dp[0][i]=Math.max(dp[1][i-1]-prices[i],dp[0][i-1]);
  5. dp[1][i]=Math.max(dp[0][i-1]+prices[i],dp[1][i-1]);
  6. }
  7. return dp[1][prices.length-1];

123. 买卖股票的最佳时机 III

  1. int[][]dp=new int[4][prices.length];
  2. dp[0][0]=-prices[0];
  3. dp[2][0]=-prices[0];
  4. for(int i=1;i<prices.length;i++){
  5. dp[0][i]=Math.max(dp[0][i-1],-prices[i]);
  6. dp[1][i]=Math.max(dp[1][i-1],dp[0][i-1]+prices[i]);
  7. dp[2][i]=Math.max(dp[2][i-1],dp[1][i-1]-prices[i]);
  8. dp[3][i]=Math.max(dp[3][i-1],dp[2][i-1]+prices[i]);
  9. }
  10. return Math.max(dp[1][prices.length-1],dp[3][prices.length-1]);

188. 买卖股票的最佳时机 IV

  1. if(k==0|| prices.length==1||prices.length==0){
  2. return 0;
  3. }
  4. int[][]dp=new int[2*k][prices.length];
  5. for(int i=0;i<=2*k-2;i+=2){
  6. dp[i][0]=-prices[0];
  7. }
  8. for(int i=1;i<prices.length;i++){
  9. for(int j=0;j<2*k;j+=2){
  10. if(j==0){
  11. dp[j][i]=Math.max(dp[j][i-1],-prices[i]);
  12. dp[j+1][i]=Math.max(dp[j+1][i-1],dp[j][i-1]+prices[i]);
  13. }else{
  14. dp[j][i]=Math.max(dp[j][i-1],dp[j-1][i-1]-prices[i]);
  15. dp[j+1][i]=Math.max(dp[j+1][i-1],dp[j][i-1]+prices[i]);
  16. }
  17. }
  18. }
  19. return dp[2*k-1][prices.length-1];

714. 买卖股票的最佳时机含手续费

  1. int[][]dp=new int[2][prices.length];
  2. dp[0][0]=-prices[0];
  3. for(int i=1;i<prices.length;i++){
  4. dp[0][i]=Math.max(dp[0][i-1],dp[1][i-1]-prices[i]);
  5. dp[1][i]=Math.max(dp[1][i-1],dp[0][i-1]+prices[i]-fee);
  6. }
  7. return dp[1][prices.length-1];

309. 最佳买卖股票时机含冷冻期

  1. int[][]dp=new int[3][prices.length];
  2. dp[1][0]=-prices[0];
  3. for(int i=1;i<prices.length;i++){
  4. dp[0][i]=Math.max(dp[0][i-1],dp[2][i-1]);
  5. dp[1][i]=Math.max(dp[1][i-1],dp[0][i-1]-prices[i]);
  6. dp[2][i]=Math.max(dp[2][i-1],dp[1][i-1]+prices[i]);
  7. }
  8. return Math.max(dp[0][prices.length-1],dp[2][prices.length-1]);