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


    题目

    给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。

    在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。

    返回 你能获得的 最大 利润 。

    示例 1:

    输入:prices = [7,1,5,3,6,4]
    输出:7
    解释:在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4 。
    随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3 。
    总利润为 4 + 3 = 7 。
    示例 2:

    输入:prices = [1,2,3,4,5]
    输出:4
    解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4 。
    总利润为 4 。
    示例 3:

    输入:prices = [7,6,4,3,1]
    输出:0
    解释:在这种情况下, 交易无法获得正利润,所以不参与交易可以获得最大利润,最大利润为 0 。

    • 法一:贪心
    class Solution {
    public:
        int maxProfit(vector<int>& prices) {
            int sum=0;//利益
            //注意i从1开始,每次判断的是当前元素和前一个元素
            for(int i=1;i<prices.size();i++)
            {
                int differ=prices[i]-prices[i-1];
                if(differ>0) sum+=differ;
            }
            return sum;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 时间复杂度O(n)
    • 空间复杂度O(1)
    • 思路
      • 找价格连续上升的区间,将区间内从差值全部加起来
      • 定义sum,遍历数组,如果后一个元素比前一个大就将题目的差加起来
  • 相关阅读:
    安装Apachi
    关于Maven,你真的了解它吗?
    i5 6500 HD530 台式机黑苹果记录
    1014. 最佳观光组合
    创建MySQL只读权限用户
    同行评议论文怎么写
    OpenAcc的使用
    typeScript简单封装axios
    数据仓库与ETL
    算法训练day43|动态规划 part05:0-1背包 (LeetCode 1049. 最后一块石头的重量 II、494. 目标和、474.一和零)
  • 原文地址:https://blog.csdn.net/weixin_45781228/article/details/126244334