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

买卖股票的最佳时机--js 算法

一、买卖股票的最佳时机

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 ;

贪心算法:
每次发现更低价格立即更新买入点(minPrice)
每次发现更高利润立即更新卖出收益(maxProfit)

/*** 计算股票买卖的最大利润(单次交易)* @param {number[]} prices - 股票每日价格数组* @returns {number} 最大利润(无利润时返回0)*/
function maxProfit(prices) {// 边界条件const len = prices.length || 0;if (len < 2) return 0;// 初始化历史最低价为第一天值let minPrice = prices[0];// 初始化最大利润为0(默认无利润)let maxProfit = 0;// 单次遍历所有价格点(从第二天开始)for (let i = 1; i < len; i++) {const currentPrice = prices[i];// 情况1:发现新的历史最低价if (currentPrice < minPrice) {minPrice = currentPrice; // 更新历史最低价// 情况2:当前价格高于历史最低价,计算潜在利润} else if (currentPrice - minPrice > maxProfit) {// 若当前利润超过历史最大利润则更新maxProfit = currentPrice - minPrice;}/* 注意:无需处理其他情况(如当前利润小于历史最大利润)因为此时只需维持已有的maxProfit值即可 */}// 返回整个遍历过程中发现的最大利润return maxProfit;
}

算法说明:
核心思路:单次遍历数组,动态追踪历史最低价,并计算当前价格与历史最低价的差值(潜在利润)
关键变量
minPrice:记录遍历过程中遇到的最低价格(初始设为最大安全整数)
maxProfit:记录当前最大利润(初始为0)
遍历过程
遇到更低价格时更新 minPrice
遇到更高价格时计算利润,并更新 maxProfit
边界处理:若所有价格递减(无利润),直接返回初始值0。

复杂度分析
时间复杂度 O(n):仅需遍历数组一次
空间复杂度 O(1):仅使用两个常量变量

二、买卖股票的最佳时机Ⅱ

给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。返回 你能获得的 最大 利润 。

贪心算法:
捕捉所有上涨波段

/*** 计算股票买卖的最大利润(单次交易)* @param {number[]} prices - 股票每日价格数组* @returns {number} 最大利润(无利润时返回0)*/
function maxProfit(prices) { const len = prices.length || 0;if (len < 2) return 0;let maxProfit = 0;// 遍历从第二天开始的所有价格for (let i = 1; i < len; i++) {const curPrice = prices[i]; // 第i天价格const prePrice = prices[i-1]; // 第i-1天价格if (curPrice > prePrice) maxProfit += (curPrice - prePrice);};return maxProfit;
}
http://www.dtcms.com/a/265210.html

相关文章:

  • linux LAMP 3
  • 开疆智能CCLinkIE转CANopen网关连接GBS20机器人配置案例
  • 第四章 网络传输介质与综合布线基础
  • 04-动态规划
  • OpenHarmony 5.0 解决点击导航栏切换后台按钮再切换到前台导航栏可能覆盖输入法问题,导致输入法下沉,最下面的显示不全
  • day046-tomcat与部署war包、jar包
  • 为什么星敏感器(Star Tracker)需要时间同步?—— 从原理到应用的全解析
  • Day04:玩转标准库中的数据处理与日志记录
  • pytest fixture基础大全详解
  • 爬虫反爬策略实战:UserAgent代理池简明指南
  • 电磁场有限元方法EX2.2-里兹法求解泊松方程控制的边值问题
  • 二刷 苍穹外卖day11
  • 讲解视频:分布滞后非线性模型DLNM​​专题:从基础到进阶学习路径
  • 记录一个QT中pro文件换行需要注意的问题
  • 第29篇:Linux审计系统深度解析:基于OpenEuler 24.03的实践指南
  • 【中文核心期刊推荐】《电子测量技术》
  • RabbitMQ使用topic Exchange实现微服务分组订阅
  • 基于SEP3203微处理器的嵌入式最小硬件系统设计
  • VBA初学习记录
  • OneCode表单架构设计:注解驱动与组件化的完美结合
  • 腾讯云认证考试报名 - TDSQL数据库交付运维专家(TCCE PostgreSQL版)
  • windows的vscode无法通过ssh连接ubuntu的解决办法
  • 网站面临爬虫攻击waf能防护住吗
  • docker拉取redis并使用
  • 《导引系统原理》-西北工业大学-周军
  • CppCon 2018 学习:Fast Conversion From UTF-8 with C++, DFAs, and SSE Intrinsics
  • 部署 KVM 虚拟化平台
  • 关于网络协议
  • 第四篇:面试官:SpringBoot 场景化实战 10 问(第四弹·附图解)
  • C语言笔记(鹏哥)上课板书+课件汇总 (编译和链接+linux讲解)