[蓝桥杯]最大化股票交易的利润

最大化股票交易的利润

题目描述

实现一个算法寻找最大化股票交易利润的策略。介绍如下:

  • 股票价格每天都在变化,以数组的索引表示交易日,以数组的元素表示每天的股票价格。
  • 可以通过买入和卖出获得利润。一天只能进行一次买入或卖出操作,一次买入加卖出操作称为一次交易次数。
  • 你只能交易一次,求使得利润最大的交易策略。

输入描述

第一行为数字 NN,表示共有 NN 天。

第二行为 NN 个数字 AiAi​,表示每天的股票价格。

其中,1≤N,Ai≤1041≤N,Ai​≤104。

输出描述

输出一行,为交易一次的最大利润(有可能利润为负)。

输入输出样例

示例

输入

8
2 5 6 1 4 3 1 3

输出

4

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

总通过次数: 3836  |  总提交次数: 4156  |  通过率: 92.3%

难度: 中等   标签: 动态规划

最大化股票交易利润的算法实现

问题分析

给定一个长度为 N 的股票价格数组,要求通过一次交易(即一次买入和一次卖出)获得最大利润。交易规则如下:

  • 买入必须在卖出之前(即交易顺序为 买入 → 卖出
  • 每天只能进行一次操作(买入或卖出)
  • 利润可能为负(即亏损情况需输出负值)
  • 若天数不足 2 天(无法完成交易),则利润为 0
算法设计

使用​​贪心算法​​在 O(N) 时间内解决问题:

  1. ​初始化​​:
    • 记录遍历过程中的最小价格 min_price
    • 初始化最大利润 max_profit 为极小值(如 INT_MIN
  2. ​遍历价格数组​​:
    • 对于第 i 天(i≥1):
      • 计算当前卖出利润:当前价格 - min_price
      • 更新最大利润:max_profit = max(当前利润, max_profit)
      • 更新最小价格:min_price = min(当前价格, min_price)
  3. ​边界处理​​:
    • 若 N<2,直接返回 0(无法交易)
      #include <iostream>
      #include <vector>
      #include <climits>
      using namespace std;int main() {int n;cin >> n;vector<int> prices(n);for (int i = 0; i < n; i++) {cin >> prices[i];}// 处理无法交易的情况if (n < 2) {cout << 0 << endl;return 0;}int min_price = prices[0];int max_profit = INT_MIN;  // 初始化为最小整数for (int i = 1; i < n; i++) {// 计算当前卖出利润int current_profit = prices[i] - min_price;// 更新最大利润if (current_profit > max_profit) {max_profit = current_profit;}// 更新最小价格if (prices[i] < min_price) {min_price = prices[i];}}cout << max_profit << endl;return 0;
      }
      算法解析
    • ​时间复杂度​​:O(N),仅需一次遍历数组
    • ​空间复杂度​​:O(1),仅使用常量额外空间
    • ​关键步骤​​:
      • ​最小价格追踪​​:动态记录历史最低价,确保买入成本最低
      • ​利润实时计算​​:用当前价格与历史最低价计算潜在利润
      • ​负利润处理​​:不强制返回 0,允许输出负值(亏损交易)
    • 示例验证
    • ​输入​​:[2, 5, 6, 1, 4, 3, 1, 3]

      • ​执行过程​​:
        天数价格最小价格当前利润最大利润
        122-INT_MIN
        25233
        3624​4​
        411-14
        54134
        63124
        71104
        83124
      • ​输出​​:4(第 1 天买入价 2,第 3 天卖出价 6)
    • ​亏损案例​​:[5, 4, 3, 2, 1]

      • ​输出​​:-1(最小亏损为第 1 天买入价 5,第 2 天卖出价 4)
    • 算法优势
    • ​高效性​​:单次遍历解决,避免 O(N2) 暴力枚举
    • ​鲁棒性​​:正确处理正/负利润及边界条件
    • ​空间优化​​:无需额外数据结构
    • 边界情况测试
      输入输出说明
      [7]0单天无法交易
      [3, 1]-2强制交易亏损
      [1, 100]99最大利润为正
      [2, 2, 2]0价格不变无利润

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/908105.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

URL 结构说明+路由(接口)的认识

一、URL 结构说明 以这个为例&#xff1a;http://127.0.0.1:5000/zhouleifeng 1.组成部分: http://&#xff1a;协议 127.0.0.1&#xff1a;主机&#xff08;本地地址&#xff09; :5000&#xff1a;端口号&#xff08;Flask 默认 5000&#xff09; /zhouleifeng&#xff1a…

微服务商城-用户微服务

数据表 用户表 CREATE DATABASE user; USE user;CREATE TABLE user (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 用户ID,username varchar(50) NOT NULL DEFAULT COMMENT 用户名,password varchar(50) NOT NULL DEFAULT COMMENT 用户密码&#xff0c;MD5加密…

Java面试题及答案整理( 2025年最新版,持续更新...)

最近发现网上很多Java面试题都没有答案&#xff0c;所以花了很长时间搜集整理出来了这套Java面试题大全&#xff0c;希望大家能够喜欢&#xff01; 注&#xff1a;篇幅有限&#xff0c;资料已整理成文档&#xff0c;后台si我666&#xff0c;我一个个发&#xff01; 这套面试文…

[论文阅读]PPT: Backdoor Attacks on Pre-trained Models via Poisoned Prompt Tuning

PPT: Backdoor Attacks on Pre-trained Models via Poisoned Prompt Tuning PPT: Backdoor Attacks on Pre-trained Models via Poisoned Prompt Tuning | IJCAI IJCAI-22 发表于2022年的论文&#xff0c;当时大家还都在做小模型NLP的相关工作&#xff08;BERT&#xff0c;Ro…

Redis最佳实践——性能优化技巧之集群与分片

Redis集群与分片在电商应用中的性能优化技巧 一、Redis集群架构模式解析 1. 主流集群方案对比 方案核心原理适用场景电商应用案例主从复制读写分离数据冗余中小规模读多写少商品详情缓存Redis Sentinel自动故障转移监控高可用需求场景订单状态缓存Redis Cluster原生分布式分片…

Vue 生命周期全解析:从创建到销毁的完整旅程

Vue 生命周期是每个 Vue 开发者必须深入理解的核心概念之一。它定义了组件从创建、挂载、更新、销毁的整个过程&#xff0c;以及在这个过程中各个阶段提供的钩子函数。掌握生命周期不仅能帮助你理解 Vue 的工作原理&#xff0c;还能让你在合适的时机执行特定的操作&#xff0c;…

【Rust 高级trait】Rust trait的一些高级用法解密

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

联想电脑护眼卫士与系统颜色配置(X-Rite)冲突 | 显示设置频繁变换色阶 - 解决方案

联想电脑护眼卫士与系统颜色配置X-Rite冲突 | 显示设置频繁变换色阶 - 解决方案 前言方案1&#xff1a;解决联想护眼卫士方案2&#xff1a;解决系统颜色配置(X-Rite) 前言 自带X-Rite软件的联想电脑&#xff08;以拯救者Y9000P&#xff0c;Win11系统为例&#xff09;&#xff…

MySQL中SELECT查询的执行顺序

MySQL中SELECT查询的执行顺序 在日常的数据库开发中&#xff0c;我们经常会写各种复杂的SELECT查询语句。然而&#xff0c;很多开发者对于MySQL实际执行这些查询的顺序并不完全了解。理解查询的执行顺序不仅有助于编写更高效的SQL语句&#xff0c;还能帮助我们更好地优化查询性…

es 的字段类型(text和keyword)

Text 当一个字段是要被全文检索时&#xff0c;比如 Email 内容、产品描述&#xff0c;这些字段应该使用 text 类型。设置 text 类型以后&#xff0c;字段内容会被分析&#xff0c;在生成倒排索引之前&#xff0c;字符串会被分析器分词。text类型的字段不用于排序&#xff0c;很…

MySQL安装及启用详细教程(Windows版)

MySQL安装及启用详细教程&#xff08;Windows版&#xff09; &#x1f4cb; 概述 本文档将详细介绍MySQL数据库在Windows系统下的下载、安装、配置和启用过程。 &#x1f4e5; MySQL下载 官方下载地址 官方网站: https://dev.mysql.com/downloads/社区版本: https://dev.my…

Linux下使用nmcli连接网络

Linux下使用nmcli连接网络 介绍 在使用ubuntu系统的时候&#xff0c;有时候不方便使用桌面&#xff0c;使用ssh远程连接&#xff0c;可能需要使用nmcli命令来连接网络。本文将介绍如何使用nmcli命令连接网络。nmcli 是 NetworkManager 的命令行工具&#xff0c;用于管理网络连…

Python----循环神经网络(BiLSTM:双向长短时记忆网络)

一、LSTM 与 BiLSTM对比 1.1、LSTM LSTM&#xff08;长短期记忆网络&#xff09; 是一种改进的循环神经网络&#xff08;RNN&#xff09;&#xff0c;专门解决传统RNN难以学习长期依赖的问题。它通过遗忘门、输入门和输出门来控制信息的流动&#xff0c;保留重要信息并丢弃无关…

U盘挂载Linux

在 只能使用 Telnet 的情况下&#xff0c;如果希望通过 U盘 传输文件到 Linux 系统&#xff0c;可以按照以下步骤操作&#xff1a; &#x1f4cc; 前提条件 U盘已插入 Linux 主机的 USB 接口。Linux 主机支持自动挂载 U盘&#xff08;大多数现代发行版默认支持&#xff09;。T…

QuickBASIC QB64 支持 64 位系统和跨平台Linux/MAC OS

QuickBASIC 的现代继任者 QB64 已发展成为一个功能强大的开源项目&#xff0c;支持 64 位系统和跨平台开发。以下是详细介绍&#xff1a; 项目首页 - QB64pe:The QB64 Phoenix Edition Repository - GitCode https://gitcode.com/gh_mirrors/qb/QB64pe 1. QB64 概述 官网&am…

【C++高级主题】命令空间(五):类、命名空间和作用域

目录 一、实参相关的查找&#xff08;ADL&#xff09;&#xff1a;函数调用的 “智能搜索” 1.1 ADL 的核心规则 1.2 ADL 的触发条件 1.3 ADL 的典型应用场景 1.4 ADL 的潜在风险与规避 二、隐式友元声明&#xff1a;类与命名空间的 “私密通道” 2.1 友元声明的基本规则…

免费开源Umi-OCR,离线使用,批量精准!

Umi-OCR&#xff08;Windows端&#xff09; Umi-OCR 是一款在 GitHub 上开源的免费 OCR 识别软件&#xff0c;它最大的亮点就是免费、开源、支持批量处理&#xff0c;而且识别准确度很高。这款软件不需要联网就能用&#xff0c;非常值得推荐&#xff01; 在 OCR 识别功能方面&…

深入剖析 Docker 容器化原理与实战应用,开启技术新征程!

文章目录 前言一、为什么 是Docker &#xff1f;二、Docker 容器化原理分析2.1 镜像&#xff08;Image&#xff09;2.2 容器&#xff08;Container&#xff09;2.3 仓库&#xff08;Registry&#xff09; 三、Docker 容器化实践3.1 Docker安装3.2 创建一个 Docker 镜像3.3 运行…

黑马程序员TypeScript课程笔记—class篇

class的基本使用 class的构造函数&#xff08;实现实例属性的初始化&#xff09; 在使用构造函数的时候&#xff0c;小括号的后面不要指定类型&#xff0c;否则就会报错&#xff0c;因为构造函数没有返回值 class实例方法 class继承&#xff08;extends&#xff09; class继承…

PDF.js无法显示数字签名

问题 pdfjs加载pdf文件时无法显示数字签名 PDF.js 从 v2.9.359 版本开始正式支持数字签名的渲染与显示&#xff0c;此前版本需通过修改源代码实现基础兼容。 建议升级pdfjs组件大于等于v2.9.359 pdfjs历史版本&#xff1a;https://github.com/mozilla/pdf.js/releases pdfjs…