/**
* 题目:股票的最大利润(Java实现)。假设把某股票的价格按照时间先后顺序存储在数组中, 请问买卖交易该股票可能获得的利润是多少?
* 例如一只股票在某些时间节点的价格为{9, 11, 8, 5,7, 12, 16, 14}。
* 如果我们能在价格为5的时候买入并在价格为16时卖出,则能收获最大的利润11。 思考:剑指offer
* 。遍历每一个数字,并保存之前最小的数字,两者差最大即为最大利润。 1)F(N,M)=(F(N-1,M)+M)%N
* 2)建立一个数组,循环遍历数组,当达到m个时,将该位标记为-1。 3)建立一个链表
*
* @author hexiaoli
*/
public class Main {
public static int MaxDiff(int[] arr) {
// 边界
if (arr == null || arr.length <= 2) {
return 0;
}
int min = arr[0];
// 最大利润可以是负数,只要亏损最小就行
int maxDiff = arr[1] - min;
for (int i = 1; i < arr.length; i++) {
// 如果arr[i-1]<min,最小值被更新
if (arr[i - 1] < min)
min = arr[i - 1];
// 更新差值
if (arr[i] - min > maxDiff)
maxDiff = arr[i] - min;
}
return maxDiff;
}
public static void main(String[] args) {
int[] arr1 = null;
System.out.println(MaxDiff(arr1));
int[] arr2 = {};
System.out.println(MaxDiff(arr2));
int[] arr3 = { 16, 16, 16, 16, 16 };
System.out.println(MaxDiff(arr3));
int[] arr4 = { 1, 2, 4, 16 };
System.out.println(MaxDiff(arr4));
int[] arr5 = { 16, 4, 2, 1 };
System.out.println(MaxDiff(arr5));
int[] arr6 = { 9, 11, 5, 7, 16, 4, 2 };
System.out.println(MaxDiff(arr6));
}
}