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

leetcode122-买卖股票的最佳时机II

leetcode 122
在这里插入图片描述

思路

方法一的核心思想是简单的贪心策略。我们每天都看当前价格和下一个价格的差值。如果下一个价格高于当前价格(即diff > 0),那么就认为当天可以买入并在第二天卖出,赚取利润。因此,方法一把所有的价格差(即diff > 0的部分)累加起来,最终得出最大利润

步骤:

遍历整个数组,计算相邻两个价格的差值
如果差值为正(表示价格上涨),则加入利润

时间复杂度:O(n),其中 n 是 prices 数组的长度,因为只需要遍历一遍数组
空间复杂度:O(1),只使用了常量空间

方法二模拟买入和卖出的策略 重点是通过标记是否已经持有股票来区分买入和卖出时机

通过比较当前和前一个价格差(curdiff 和 prediff)来决定买入和卖出。
flag 标志用来表示当前是否持有股票。如果持有股票且价格下跌,则卖出;如果没有股票且价格上涨,则买入。
在循环结束后,检查是否还有未卖出的股票,如果有则在最后时刻卖出
方法二和之前的摆动序列很相似,也可以参考此博文

实现

方法1-贪心算法
var maxProfit = function (prices) {
    let sum = 0;
    for (let i = 0; i < prices.length - 1; i++) {
        let diff = prices[i + 1] - prices[i]
        if (diff > 0) {
            // 可以买入
            sum += diff
        }
    }
    return sum;
};
方法2
var maxProfit = function (prices) {
  let prediff = 0, curdiff = 0;
  let sum = 0, flag = false;
  for (let i = 0; i < prices.length - 1; i++) {
    curdiff = prices[i + 1] - prices[i];
    if (curdiff > 0 && prediff <= 0) {
      // 可以买入
      sum -= prices[i]
      flag = true
      prediff = curdiff
    }
    if (flag && curdiff < 0 && prediff >= 0) {
      // 可以卖出
      sum += prices[i]
      flag = false;
      prediff = curdiff
    }
  }
  // 到最后都还没有卖出,把最后一个卖掉
  if (flag) {
    sum += prices[prices.length - 1]
  }
  return sum;
};

相关文章:

  • 通过ssh config让远程服务器通过本地代理访问受限网络
  • 公司内网部署离线deepseek本地模型实战
  • 快 速 幂
  • MySQL请求处理全流程深度解析:从SQL语句到数据返回
  • 队列(C/C++)
  • 25/4/6 算法笔记<仿真O2DES>基础知识学习
  • CasaOS小主机本地安装1Panel运维面板结合内网穿透移动端远程运维
  • 【网络安全】大学信息安全技术 期末考试复习题
  • 力扣热题100——动态规划(上)
  • B站视频教材: Yocto项目实战教程 第一章 PPT讲解
  • 【dify应用】将新榜排行数据免费保存到飞书表格
  • Android Transition转场动效使用全解析
  • 精心整理的 22道 Kafka 高频面试题(含答案),你都会了吗?
  • [leetcode] 面试经典 150 题——篇9:二叉树(番外:二叉树的遍历方式)
  • AI Agent开发大全第二十一课-如何开发一个MCP(从0开发一个MCP Client)
  • Kafka 的发展历程
  • React学习-css
  • 【IDEA】✈️自定义模板,自动生成类和方法注释
  • 差分音频转单端音频单电源方案
  • 小菜Go:Ubuntu下Go语言开发环境搭建
  • 外贸网站优化软件/经典seo伪原创
  • 福州做网站哪家公司好/百度优化师
  • 高明做网站/手机清理优化软件排名
  • 深圳网页制作费用/抖音seo是什么
  • app建设网站公司/百度广告怎么做
  • 佛山网站建设维护/关键词网站