码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-02-01 19:35:17      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:col   ice   连续   public   假设   sdn   顺序存储   ESS   算法   

面试题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对答如流系列 - 股票的最大利润

标签:col   ice   连续   public   假设   sdn   顺序存储   ESS   算法   

原文地址:https://www.cnblogs.com/JefferyChenXiao/p/12249474.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!