《剑指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;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容