面试题:股票的最大利润
题目:
假设吧某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少
如:一只股票在某些时间节点的价格为{9,11,8,5,7,12,16,14},如果在5买入16卖出,则收获最大利润11
思路:
股票交易的利润来自股票买入和卖出的差价,且只能在买入后卖出
如果把买入价和卖出价两个数字组成一个数对,则利润就是这个数对的差值
最大利润就是数组中所有数对的最大差值
一、可以用暴力解法——找出所有数对,逐一求差值,时间复杂度O(n)
二、
定义当卖出价为数组中第i个数字时可能获得的最大利润,当卖出价格固定时,买入价格越低利润越大
也就是说,如果在扫描到数组中的第i个数字时,只要我们能记住之前的i-1个数字中的最小值,则能算出在当前价位卖出时可能得到的最大利润
代码:
public class Q63 {
public static void main(String[] args) {
int[] a = new int[] {9,11,8,5,7,12,16,14};
int re = maxDiff(a);
System.out.println(re);
}
public static int maxDiff(int[] a) {
if(a.length<2) {
System.out.println("wrong input");
return 0;
}
int min = a[0];
int max = a[1]-a[0];
for(int i=1;i<a.length;i++) {
// 记录差值最大值
if(a[i]-min>max) {
max = a[i]-min;
}
// 记录最小值
if(a[i]<min) {
min = a[i];
}
}
return max;
}
}