最佳买入点(最佳买入点指标公式)
给出一只股票的价格,要求给出最佳买入和卖出价格,使得收益最大。
示例:
输入: [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),显然解法二更优。
版权声明:本文为互联网用户自发贡献的内容,其中观点及相关内容仅代表作者本人。本网站仅提供信息存储空间服务,不拥有这些内容的所有权,并且不承担任何法律责任。如果发现本网站上有涉嫌侵权或违法违规的内容,请立即联系我们的客服QQ:6532516以便进行及时清除。