《剑指offer第二版》面试题63:股票的最大利润(java)

题目描述

  • 假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?例如,一只股票在某时间节点的价格为{9,11,8,5,7,12,16,14}。如果在价格为5的时候买入,16卖出。则能收获最大的利润11。

解题思路

  1. 该题目即求数组的所有数的最大差值。
  2. 遍历数组,假设当前遍历第i个数组,用min存储前面i-1个数字的最小值,maxDiff记录当前数字和min的最大差值。遍历完数组后,返回maxDiff即可。

代码

int maxDiff(int[] arr) {
    if (arr == null || arr.length <= 0) {
        return -1;
    }
    int min = arr[0];
    int maxDiff = 0;
    for (int i = 1; i < arr.length; i++) {
        if (arr[i] - min > maxDiff) {
            maxDiff = arr[i] - min;
        }
        if (arr[i] < min) {
            min = arr[i];
        }
    }
    return maxDiff;
}

你可能感兴趣的:(《剑指offer第二版》面试题63:股票的最大利润(java))