已知一段时间内股价有涨跌,例如 {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