剑指 Offer 63 股票的最大利润

剑指 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;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容