题目:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?例如,一只股票在某些时间节点的价格为{9,11,8,5,7,12,16,14}。如果我们能在价格为5的时候买入并在价格为16时卖出,则能收获的最大利润为11。
基本思路:使用暴力法时间复杂度为O(n^2),肯定是超时的。换一种思路:我们先定义diff(i)为当卖出价为数组中第i个数字是可能获得的最大利润。显然,在卖出价固定时,买入价越低利润就越大。也就是说,如果在扫描到数组中的第i个数字时,只要能够记住i之前个数字中的最小值,就能算出在当前价位卖出时可能得到的最大利润。
Java实现:
public class MaxDiff {
public static int maxDiff(int[] numbers) {
if(numbers==null||numbers.length<2)
return 0;
int min=numbers[0];
int max=numbers[1]-min;
for(int i=2;i<numbers.length;i++) {
if(numbers[i-1]<min)
min=numbers[i-1];
int cur=numbers[i]-min;
if(cur>max)
max=cur;
}
return max;
}
}