剑指Offer对答如流系列 - 股票的最大利润

Posted jefferychenxiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer对答如流系列 - 股票的最大利润相关的知识,希望对你有一定的参考价值。

面试题63:股票的最大利润

题目描述

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

问题分析

这道题很容易想到贪心算法:遍历每一个数字,并保存之前最小的数字,两者差最大即为最大利润。

不过这也有一个数学模型,叫做峰谷求值

技术图片

专注点在于这种图表的连续的峰和谷。

更多的情况是关注它的差值:

用数学语言描述为:
技术图片

问题解决

    public int maxProfit(int[] prices) {
        int i = 0;
        int valley = prices[0];
        int peak = prices[0];
        int maxprofit = 0;
        while (i < prices.length - 1) {
            while (i < prices.length - 1 && prices[i] >= prices[i + 1]) {
                i++;
            }
            valley = prices[i];
            while (i < prices.length - 1 && prices[i] <= prices[i + 1]) {
                i++;
            }
            peak = prices[i];
            maxprofit += peak - valley;
        }
        return maxprofit;
    }

以上是关于剑指Offer对答如流系列 - 股票的最大利润的主要内容,如果未能解决你的问题,请参考以下文章

剑指OFFER----面试题63. 股票的最大利润

剑指Offer面试题63. 股票的最大利润

剑指Offer面试题63. 股票的最大利润

剑指 Offer 63. 股票的最大利润

算法剑指 Offer 63. 股票的最大利润

剑指offer——股票的最大利润