剑指 Offer 63 股票的最大利润
2021-12-18 本文已影响0人
itbird01
剑指 Offer 63. 股票的最大利润
题意:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?
解题思路
解法:
1.分析题意,我们定义,P[n]为第n天卖出所能收获的最大收益
2.接下来分析,这个第n天的最大收益,和什么有关系的?显而易见,是想要知道前面n-1天,哪天的价格是最低的,在那天买入,然后在第n天卖出,就是我们所求的第n天的最大收益
3.问题转换,求取状态转移方程实际为:P[n]=prices[n]-min(前面n-1天的最小价格)
4.我们定义,min为前面n-1天的最小价格,pn为第n天的最大收益,迭代求取结果即可
解题遇到的问题
无
后续需要总结学习的知识点
无
##解法1
class Solution {
public int maxProfit(int[] prices) {
// 分析题意,我们定义,P[n]为第n天卖出所能收获的最大收益
// 接下来分析,这个第n天的最大收益,和什么有关系的?显而易见,是想要知道前面n-1天,哪天的价格是最低的,在那天买入,然后在第n天卖出,就是我们所求的第n天的最大收益
// 问题转换,求取状态转移方程实际为:P[n]=prices[n]-min(前面n-1天的最小价格)
if (prices.length <= 1) {
return 0;
}
// min为前面n-1天的最小价格,pn为第n天的最大收益
int min = prices[0], pn = 0, max = 0;
for (int i = 1; i < prices.length; i++) {
min = Math.min(min, prices[i]);
pn = prices[i] - min;
max = Math.max(pn, max);
}
return max;
}
}