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

Leetcode 剑指 Offer II 161. 连续天数的最高销售额

题目难度: 简单

原题链接

今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号算法精选里回复剑指offer2就能看到该系列当前连载的所有文章了, 记得关注哦~

题目描述

某公司每日销售额记于整数数组 sales,请返回所有 连续 一或多天销售额总和的最大值。

要求实现时间复杂度为 O(n) 的算法。

示例 1:

  • 输入:sales = [-2,1,-3,4,-1,2,1,-5,4]
  • 输出:6
  • 解释:[4,-1,2,1] 此连续四天的销售总额最高,为 6。

示例 2:

  • 输入:sales = [5,4,-1,7,8]
  • 输出:23
  • 解释:[5,4,-1,7,8] 此连续五天的销售总额最高,为 23。

提示:

  • 1 <= arr.length <= 10^5
  • -100 <= arr[i] <= 100

题目思考

  1. 如何记录最大和?
  2. 可以不使用额外空间吗?

解决方案

思路

  • 题目要求复杂度 O(N), 那么我们就不能使用暴力两重循环求当前前缀和的方法了, 那样的复杂度是 O(N^2)
  • 那如何做到一次遍历就计算出结果呢?
  • 假设当前以 i 结尾的最大和是 sm, 那么到 i+1 的时候, 以它结尾的最大和可以有两种选择:
    • 在 sm 的基础上加上 i+1 的值
    • 也可以另起炉灶, 从 i+1 开始计算 (对应的是sm < 0的情况)
  • 也即 i+1 结尾的最大和就是max(sm+arr[i+1], arr[i+1])
  • 它就是新的 sm 值, 这样就不需要额外的空间
  • 而最终的结果自然就是max(以各个下标结尾的最大和), 可以在遍历的时候顺带一起判断
  • 以上就是典型的动态规划的思想, 利用前面的计算结果来推导出当前的结果
  • 下面的代码对必要步骤有详细的解释, 方便大家理解

复杂度

  • 时间复杂度O(N)
    • 只需要遍历整个数组一遍
  • 空间复杂度O(1)
    • 不需要额外空间

代码

classSolution:defmaxSales(self,sales:List[int])->int:# 初始化最终结果为负无穷, 因为可能数组全部都是负数res=-float('inf')# 初始化和为0sm=0forxinsales:# 计算当前结尾的最大值sm=max(sm+x,x)# 更新最终结果为当前最大的最大值res=max(res,sm)returnres

大家可以在下面这些地方找到我~😊

我的 GitHub

我的 Leetcode

我的 CSDN

我的知乎专栏

我的头条号

我的牛客网博客

我的公众号: 算法精选, 欢迎大家扫码关注~😊

http://www.jsqmd.com/news/359250/

相关文章:

  • 【毕业设计】基于springboot+小程序的桂林旅游桂林源记小程序的设计与实现(源码+文档+远程调试,全bao定制等)
  • 别被名字吓到:锯齿迭代器(Zigzag Iterator)其实是个“很人性”的算法
  • 智能辅助:6款AI工具优化论文写作流程与成果
  • 小程序毕设选题推荐:基于springboot+小程序的医院挂号系统小程序基于SpringBoot智能在线预约挂号系统微信小程序【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 小程序计算机毕设之基于springboot+小程序的医院挂号系统小程序基于SpringBoot+微信小程序的微信医院挂号系统(完整前后端代码+说明文档+LW,调试定制等)
  • 适合小白的git的基础使用方法
  • 借助AI技术:6款工具让论文写作更轻松精准
  • 【计算机毕业设计案例】基于springboot的文化旅游小程序基于springboot+小程序的桂林旅游桂林源记小程序的设计与实现(程序+文档+讲解+定制)
  • 【计算机毕业设计案例】基于springboot+小程序的桂林旅游桂林源记小程序桂林旅游景点导游平台的设计与实现(程序+文档+讲解+定制)
  • 提升学术写作:6款AI工具助你高效完成论文
  • 【计算机毕业设计案例】基于JAVA+SpringBoot+MySQL+微信小程序的校园点餐系统基于springboot+小程序的校园点餐系统小程序的设计与实现(程序+文档+讲解+定制)
  • 论文写作新选择:6款AI工具实现高效与高质量
  • 洛谷P4035
  • 第一章使用Navicat创建数据库
  • 小程序毕设项目:基于springboot+小程序的桂林旅游桂林源记小程序的设计与实现(源码+文档,讲解、调试运行,定制等)
  • 洛谷P2607
  • 我们去看看小明和小华交流什么神秘的C++项目吧
  • Visual Studio 2026新解决方案格式slnx详解
  • 你永远不知道用户会怎样使用你的软件
  • CF2155E
  • 【CTFshow-pwn系列】03_栈溢出【pwn 042】详解:64位下的字符串搜寻与 ROP
  • 安全工具篇动态绕过DumpLsass凭据SysCALL调用对抗EDR打乱源头特征
  • 网络编程 SDN
  • 小程序计算机毕设之基于springboot+小程序的校园点餐系统小程序的设计与实现基于JAVA+SpringBoot+MySQL+微信小程序的校园点餐系统(完整前后端代码+说明文档+LW,调试定制等)
  • 以工程思维,破局软件开发的混沌
  • 详细介绍:C++起始之路——类和对象(下)
  • 小程序计算机毕设之基于springboot+小程序的桂林旅游桂林源记小程序的设计与实现基于SpringBoot与微信小程序的文化旅游小程序系统设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 于细节处精进,在实践中成长
  • 什么是网络安全(Cybersecurity)
  • 跳出技术局限,理解软件构建的本质