数据结构与算法

剑指 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;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读