剑指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对答如流系列 - 股票的最大利润的主要内容,如果未能解决你的问题,请参考以下文章