[藍橋杯]最大化股票交易的利潤

最大化股票交易的利潤

題目描述

實現一個算法尋找最大化股票交易利潤的策略。介紹如下:

  • 股票價格每天都在變化,以數組的索引表示交易日,以數組的元素表示每天的股票價格。
  • 可以通過買入和賣出獲得利潤。一天只能進行一次買入或賣出操作,一次買入加賣出操作稱為一次交易次數。
  • 你只能交易一次,求使得利潤最大的交易策略。

輸入描述

第一行為數字?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
繁體地址,請注明出處:http://hk.pswp.cn/news/908105.shtml
英文地址,請注明出處:http://en.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…