【贪心算法】买卖股票的最佳时机

发布于:2022-11-28 ⋅ 阅读:(2165) ⋅ 点赞:(2)

不管前方的路有多苦,只要走的方向正确,不管多么崎岖不平,都比站在原地更接近幸福。 —— 千与千寻

一、题目描述

给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。
在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。返回你能获得的最大利润 。

示例:

在这里插入图片描述

来源:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii

二、 思路

在这里插入图片描述

本题是一道典型的贪心算法解决的题目,贪心算法最难想的就是如何贪心,也就是我们贪的到底是什么,对本题来说,可以计算出每个相邻天买入卖出股票可获得的利润取出所有的正利润就是最优的购买方案,此时能获得的总利润也是最大的。也就是说,我们贪心贪的就是所有能获得正利润的日子,因为如果选了负利润的日子,那么结果一定会变小。

三、代码

    public int maxProfit(int[] prices) {
    
        // 定义额外 profit 数组表示当天利润
//        int len = prices.length;
//        int[] profit = new int[len-1];
//        int ans = 0;
//        for(int i=1; i<len; i++){
//            profit[i] = prices[i] - prices[i-1];
//        }
//        for(int i=0; i<len-1; i++){
//            ans += profit[i]>0 ? profit[i] : 0;
//        }
//        return ans;
               
        // 不定义额外 profit 数组   
        int len = prices.length;
        int ans = 0;
        for(int i=1; i<len; i++){
            int profit = prices[i] - prices[i-1];
            ans += (profit > 0) ? profit : 0;
        }
        return ans;
    }

四、总结

贪心算法没有具体套路,还是比较难想到的,但有个总体思路就是找到局部最优解,再由局部最优解找到全局最优解。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到