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

面试150 环形子数组的最大和

在这里插入图片描述

思路

通过分情况处理,先求出非环形情况下的最大子数组和(max_sum),然后用类似方式求出最小子数组和(min_sum)。由于环形最大子数组可能由总数组和减去中间最小子数组得到,因此再计算总和 total - min_sum 与 max_sum 进行比较,取两者的较大值作为最终答案。注意到如果数组全为负数,此时 total - min_sum 等于 0,会误导结果,因此单独判断 max_num < 0 的情况,直接返回最大值,避免错误。该方法充分利用了Kadane算法的优雅特性,时间复杂度为 O(n)。

class Solution:def maxSubarraySumCircular(self, nums: List[int]) -> int:def max_sum(nums):cur=max_num=nums[0]for num in nums[1:]:cur=max(num,num+cur)max_num=max(max_num,cur)return max_numdef min_sum(nums):cur=min_num=nums[0]for num in nums[1:]:cur=min(num,num+cur)min_num=min(min_num,cur)return min_numtotal=sum(nums)max_num=max_sum(nums)min_num=min_sum(nums)if max_num<0:return max_num #如果没有这样的话,最后会返回0,不走下面那步return max(max_num,total-min_num)
http://www.dtcms.com/a/295157.html

相关文章:

  • StringBuilder学习
  • Python 程序设计讲义(8):Python 的基本数据类型——浮点数
  • 【faiss】用于高效相似性搜索和聚类的C++库 | 源码详解与编译安装
  • C基础 07_综合案例《猜拳游戏》
  • 机器学习与视觉结合开发基础
  • IPTV电视直播源更新工具和检测直播源工具
  • Python打卡Day22 kaggle泰坦尼克号生存预测
  • 基于Informer+BiGRU-GAtt的并行预测模型
  • Java开发岗面试记录合集
  • 二分查找----3.在排序数组中查找元素的第一个和最后一个位置
  • 语音增强相关技术
  • 【世纪龙科技】新能源汽车维护与故障诊断-汽车专业数字课程资源
  • 第八讲:C++中的vector
  • Ⅹ—6.计算机二级综合题5---6套
  • Fast Frequency Estimation Algorithm by Least Squares Phase Unwrapping
  • OpenLayers 快速入门(三)Source 对象补充
  • 车载绝缘子放电状态检测系统数据分析软件需求说明书
  • android15 wifi信号格数DB值对应关系及wifi回连时间
  • Python3常见接口函数
  • 详解FreeRTOS开发过程(四)-- 任务切换
  • 进程间通信之-----零拷贝
  • 【已解决】Jetson Orin NX apt更换国内源
  • 网络基础DAY18-动态路由协议基础
  • 零增益扰动!纯相位旋转:二阶全通滤波器实现精准超前矫正
  • 压测软件JMeter安装配置以及创建桌面快捷方式(详细图解)
  • 【每日算法】专题十八_BFS 解决拓扑排序
  • 前端开发性能监控详解
  • OpenCV(02)图像颜色处理,灰度化,二值化,仿射变换
  • 高可用架构模式——如何设计计算高可用架构
  • 前端学习日记(十一)