1、题目描述
假设把股票的价格按照时间顺序先后存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?假如,一只股票在某些时间节点的价格为{9,11,8,5,7,12,16,14}。如果我们能在价格为5 的时候买入并在价格为16的时候卖出,则能获得最大的利润。
2、代码实现
package com.baozi.offer;
/**
* @author BaoZi
* @create 2019-07-15-11:17
*/
public class Offer32 {
public static void main(String[] args) {
Offer32 offer32 = new Offer32();
int[] array = new int[]{9, 11};
int result = offer32.maxDiff(array);
System.out.println(result);
}
//显然再加个固定的时候,买入的价格越低获得的利润越大,也就是说,如果再扫描到数组中的第i个数字的时候,
//只要我们能够直到之前的i-1个数字中的最小值,就能够直接算出来在当前价格卖出所获得的利润是多少。
public int maxDiff(int[] array) {
if (array.length == 0 || array == null) {
return 0;
}
//该变量用于记录当前位置时之前的i-1个数字的最小值是多少
int min = array[0];
//股票一定是先买入才能卖出,所以这里初始化的时候一定是数组中第二个数字的时候才有机会获得利润
int maxDiff = array[1] - min;
for (int i = 2; i < array.length; i++) {
if (array[i - 1] < min) {
min = array[i - 1];
}
int tempDiff = array[i] - min;
if (maxDiff < tempDiff) {
maxDiff = tempDiff;
}
}
return maxDiff;
}
}