最佳买入点(最佳买入点指标公式)

添财网 10-28 10:05 167次浏览

给出一只股票的价格,要求给出最佳买入和卖出价格,使得收益最大。

示例:

输入: [7,1,5,3,6,4]

输出: 5

解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。

分析:

题目的要求是要找到前面的某一个极小值,后面的一个极大值,使得极大值与极小值的差最大。问题解法有二:

其一,通过两次循环,暴力计算每个买入点和卖出点的差,计算最大值。

int[] values = new int[]{7, 1, 5, 3, 6, 4};
int profit = 0;
int buyDate = -1;
int sellDate = -1;
for (int i = 0; i < values.length - 1; i++){
    for (int j = i+1; j  profit){
            buyDate = i;
            sellDate = j;
            profit = values[j] - values[i];
        }
    }
}

其二,通过动态规划的方法,一次循环搞定最大利润的计算。

每个位置的最大利润我们用dp[i]表示,则dp[i] = max(price[i] – min, dp[i-1]);

如果我们只是计算最大利润,那么可以简化为dp[i] = max(price[i] – min, maxProfit)

int maxProfit = 0, min = Integer.MAX_VALUE;
for(int i = 0; i < values.length; i++){
    if(values[i]  maxProfit)
        // 收益变大,更新最大收益
        maxProfit = values[i] - min;
}

解法一O(n^2), 解法二O(n),显然解法二更优。