动态规划求股票买入、卖出最大收益 java 实现( 最多可进行 1 次 “买入 ==> 卖出“ 操作 )

MaxIncomeVO.java:


import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;


 **/
@Getter
@Setter
public class MaxIncomeVO implements Serializable {

    /**
     * 当天处于持有股票状态时的最大收益( 可能是负数 )
     */
    private Integer maxIncome_holding;

    /**
     * 当天不处于持有( 已经卖出了或者还没有买入,反正就是当前手里没有股票的意思 )股票状态时的最大收益( 可能是负数 )
     */
    private Integer maxIncome_not_holding;

}

StockIncomeTest.java:


import com.alibaba.fastjson.JSONObject;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * 全程最多允许1次 "买入--》卖出" 操作 下的动态规划
 **/
public class StockIncomeTest {

    public static void main(String[] args) {
        // 生成随机的股票价格集合
        // int[] prices = { 7,3,4,5,1,3,5,6,8,3,4,5,2,9,7,8,5,4,3,2,1,10,100,9,10,20,300,100,200,283 };
        int[] prices = generateRandomPriceList(20,20,1);
        System.out.print( "股票价格趋势:" );
        System.out.println( JSONObject.toJSONString( prices ) );

        // 使用动态规划算法计算最大收益
        MaxIncomeVO maxIncome = calculateMaxIncome(prices);
        System.out.println( "最大收益:" + maxIncome.getMaxIncome_not_holding() + " 元" );
    }

    private static MaxIncomeVO calculateMaxIncome(int[] prices) {
        if( prices == null){
            return null;
        }
        int size = prices.length;
        if( size <= 1 ){
            return null;
        }
        // 初始化 dp array
        MaxIncomeVO[] dp = new MaxIncomeVO[ size ];
        for( int i=0;i

你可能感兴趣的:(动态规划,算法,动态规划,java,数据结构与算法,股票最大收益问题)