当前位置: 首页 > news >正文

每日一题:买卖股票的最佳时机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 。

提示:

  • 1 <= prices.length <= 3 * 10^4
  • 0 <= prices[i] <= 10^4

买卖股票的最佳时机在leetcode上有一个系列,这是系列中的第二题。

相比第一题,去除了只能买卖一次股票的限制,也就是我们可以重复低买高卖这个过程多次。

那么在prices数组中,只要是单调递增的区间,都可以是我们的利润。

以[7,1,5,3,4,6,4]为例,利润空间就是[1,5]和[3,4,6]。那么问题就转化成了求所有单调递增区间的左右差值。

贪心算法

class Solution {
public:int maxProfit(vector<int>& prices) {int maxprofit = 0;int n = prices.size();int i = 0;while(i < n-1){int temp;if(prices[i] < prices[i+1]){temp = prices[i];while(i < n-1 && prices[i+1] > prices[i]){++i;}maxprofit += (prices[i] - temp);}++i;}return maxprofit;}
};

算法概述:

  1. 遍历数组

    使用 while 循环遍历数组,直到 i 达到数组的末尾。
  2. 寻找上涨趋势

    如果当前价格 prices[i] 小于下一个价格 prices[i+1],则表示价格正在上涨。
  3. 买入股票

    记录当前价格 temp
  4. 继续寻找上涨趋势

    继续遍历数组,直到价格开始下跌(prices[i+1] > prices[i])。
  5. 卖出股票

    当价格开始下跌时,卖出股票,并计算利润 prices[i] - temp
  6. 更新最大利润

    将计算出的利润添加到 maxprofit 中。
  7. 继续遍历

    递增 i,继续遍历数组。
  8. 返回最大利润

    遍历完成后,返回 maxprofit

这里实际上可以压缩统一这个遍历的过程:

        for (int i = 1; i < n; ++i) {maxprofit += max(0, prices[i] - prices[i - 1]);}

反正可以无限买卖,也就不关心到底是怎么操作的,只要今天比昨天的价格高,就在昨天买入,今天卖出,反之利润为0,也无所谓。

http://www.lryc.cn/news/340830.html

相关文章:

  • nginx安装在linux上
  • ENSP-旁挂式AC
  • 如何获取手机root权限?
  • 2023年全国青少年信息素养大赛(Python)海南赛区复赛真题
  • node.js服务器动态资源处理
  • DNS是TCP还是UDP
  • Redis魔法:解锁高性能缓存的神奇之门(二)
  • ROS2 仿真学习02 Gazebo导入官方示例模型
  • echarts图表按需导入
  • 蓝桥杯(基础题)
  • 【R语言】概率密度图
  • 【学习】软件测试需求分析要从哪些方面入手
  • starrocks的fe节点启动不起来的解决办法
  • 如何用易查分小程序快速制作填表?
  • Redis部署之主从
  • 【模拟】Leetcode 数青蛙
  • Scala 02——Scala OOP
  • FFmpeg: 自实现ijkplayer播放器--04消息队列设计
  • Redis中的集群(四)
  • JookDB下载安装使用
  • 百度OCR身份证识别C++离线SDKV3.0 C#对接
  • Web前端 Javascript笔记1
  • Git回滚版本并push到远端master
  • MAC: 自己制作https的ssl证书(自己签发免费ssl证书)(OPENSSL生成SSL自签证书)
  • mac配置Jmeter环境
  • Linux虚拟化————KVM
  • 【b站李同学的Lee】Part 2 模块化开发 NodeJS+Gulp基础入门+实战
  • AI大模型日报#0415:贾佳亚团队新作王炸、马斯克首款多模态大模型、ChatGPT to B
  • 基于GRU实现评论文本情感分析
  • 【C 数据结构】线性表