算法学习之股票的最大利润

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

思路:因为时间顺序的存在,所以我们只要关系最小值及当前值与最小值的差值即可,遍历正如时间顺序一样一直向后推进

    public int getMaxDiff(int[] numbers) {

        if (numbers == null || numbers.length < 2) return -1;

        int minNumber = numbers[0], maxDiff = numbers[1] - numbers[0];

        for (int i = 2; i < numbers.length; i++) {
            if(minNumber>numbers[i-1]) {
                minNumber = numbers[i-1];
            }
            int diff = numbers[i] -minNumber;
            if(diff>maxDiff) {
                maxDiff=diff;
            }
        }

        return maxDiff;
    }

时间复杂度:O(n)

空间复杂度:O(1)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章