已知一段时间内股价有涨跌,例如 {3,6,1,4,7,3,8,8,3,5}.求最大获利是多少。不能买空卖空。
例如,上例应该是第3天买,第7天卖获利最大,获利为7。
其实最简单直接的思路还是双重for循环解法,只是效率较低,为O(n的平方):
import java.util.Arrays;
public class Main{
public static void main(String[] args){
int[] a = {3,6,1,4,7,3,8,8,3,5};
int d = 0;
for(int i=0; i<a.length; i++){
for(int j=i; j<a.length; j++){
if(d < a[j] - a[i]){
d = a[j] - a[i];
}
}
}
System.out.println(d);
}
}
另一种解法:
找出某天之前的最低点和之后的最高点,并计算最大差值。通过一次循环找到股票的最低点和最高点,从而得到最大获利。看上去是一次循环,但由于找最小值和最大值的花费,性能和解法一差不多。
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] a={3,9,1,4,7,3,8,8,3,5};
int d=0;
for(int i=1;i<a.length;i++){
int[] x = Arrays.copyOfRange(a,0,i);
int[] y = Arrays.copyOfRange(a,i,a.length);

该博客探讨了如何在给定的股票价格序列中找到最大收益的买卖策略。首先介绍了使用双重for循环的直观但效率低下的方法,然后提出通过一次循环查找最低点和最高点来提高效率,虽然实际性能接近O(n^2)。最后,讨论了线性时间复杂度O(n)的解决方案,以更高效地计算股票的最大潜在利润。
最低0.47元/天 解锁文章
697

被折叠的 条评论
为什么被折叠?



