贪心算法|122.买卖股票的最佳时机II

力扣题目链接

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int result = 0;
        for (int i = 1; i < prices.size(); i++) {
            result += max(prices[i] - prices[i - 1], 0);
        }
        return result;
    }
};

贪心思路出来了,代码居然如此简单啊!

思路

本题首先要清楚两点:

  • 只有一只股票!
  • 当前只有买股票或者卖股票的操作

想获得利润至少要两天为一个交易单元。

#贪心算法

这道题目可能我们只会想,选一个低的买入,再选个高的卖,再选一个低的买入.....循环反复。

如果想到其实最终利润是可以分解的,那么本题就很容易了!

如何分解呢?

假如第 0 天买入,第 3 天卖出,那么利润为:prices[3] - prices[0]。

相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。

此时就是把利润分解为每天为单位的维度,而不是从 0 天到第 3 天整体去考虑!

那么根据 prices 可以得到每天的利润序列:(prices[i] - prices[i - 1]).....(prices[1] - prices[0])。

如图:

122.买卖股票的最佳时机II

一些同学陷入:第一天怎么就没有利润呢,第一天到底算不算的困惑中。

第一天当然没有利润,至少要第二天才会有利润,所以利润的序列比股票序列少一天!

从图中可以发现,其实我们需要收集每天的正利润就可以,收集正利润的区间,就是股票买卖的区间,而我们只需要关注最终利润,不需要记录区间

那么只收集正利润就是贪心所贪的地方!

局部最优:收集每天的正利润,全局最优:求得最大利润

局部最优可以推出全局最优,找不出反例,试一试贪心!

 

独自敲代码,这题很好理解啦!

关键就是想到这个贪心的思路有点想不到呜呜呜 

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-08 00:46:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-08 00:46:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-08 00:46:01       82 阅读
  4. Python语言-面向对象

    2024-04-08 00:46:01       91 阅读

热门阅读

  1. 前端开发之el-select 设置默认值后选项无法切换

    2024-04-08 00:46:01       169 阅读
  2. 违法解除劳动合同后【股票争议】——案例学习

    2024-04-08 00:46:01       42 阅读
  3. 第十五题:最大距离

    2024-04-08 00:46:01       64 阅读
  4. 【算法】求平方根 - 二分法/牛顿迭代

    2024-04-08 00:46:01       36 阅读
  5. 专业虚拟社区用户知识共享行为影响因素研究

    2024-04-08 00:46:01       39 阅读
  6. 数据库基础教程 第三版 —建表

    2024-04-08 00:46:01       39 阅读
  7. 谷歌Rust生产力高于C++两倍?

    2024-04-08 00:46:01       38 阅读
  8. 2024.2.17力扣每日一题——N叉树的层序遍历

    2024-04-08 00:46:01       34 阅读
  9. SQL高级教程

    2024-04-08 00:46:01       39 阅读