2026-10-01:乘以系数后最大子数组和。用go语言,输入包含一个整数序列 nums,以及一个大于零的整数 k。你需要先在 nums 中挑出一段连续且至少包含一个元素的范围,然后对这个范围里的所有

发布时间:2026/10/2 8:28:20

2026-10-01:乘以系数后最大子数组和。用go语言,输入包含一个整数序列 nums,以及一个大于零的整数 k。你需要先在 nums 中挑出一段连续且至少包含一个元素的范围,然后对这个范围里的所有 2026-10-01乘以系数后最大子数组和。用go语言输入包含一个整数序列 nums以及一个大于零的整数 k。你需要先在 nums 中挑出一段连续且至少包含一个元素的范围然后对这个范围里的所有数统一做两种处理之一全部乘上 k或者全部除以 k。做除法时只保留整数结果小数部分直接舍去也就是朝 0 的方向取整。处理完成后会得到一个新的序列。接着在这个新序列中再挑出一段连续且至少包含一个元素的范围计算这段范围内所有数的和。第一步修改的范围和第二步求和的范围可以不同。问在所有可能选择中这个和最大能是多少并返回该最大值。1 nums.length 100000。-100000 nums[i] 100000。1 k 100000。输入 nums [1,-2,3,4,-5], k 2。输出 14。解释将子数组 [3, 4] 中的每个数字乘以 2。结果为 nums [1, -2, 6, 8, -5]。和最大的子数组是 [6, 8]因此输出为 6 8 14。题目来自力扣3976。具体步骤可以这样理解先固定一种操作模式比如“全部乘以 k”。然后再固定另一种模式“全部除以 k”。对每种模式分别求一个最大值最后比较两个最大值。在固定模式下从左到右遍历整个数组。对每个元素先根据模式计算出它被操作后的值如果是乘法模式操作后的值就是原值乘以 k。如果是除法模式操作后的值就是原值除以 k。除法要按题目要求取整数结果也就是向 0 方向截断。正数向下取整负数向上取整本质上就是直接丢弃小数部分保留靠近 0 的整数。扫描时维护三个状态分别表示以当前元素结尾的某种最大子数组和第一个状态还没有开始执行操作。这个状态只使用原值类似经典的最大子数组和。它可以随时放弃前面的负数部分从当前元素重新开始。第二个状态当前正处于操作区间内并且求和子数组也包含当前这个被操作的元素。这个状态使用操作后的值。它可以从“还没开始操作”的状态转移过来表示操作区间从当前元素开始也可以从自己上一轮的状态延续过来表示操作区间还在继续还可以直接丢弃前面从当前元素重新开始一个操作区间。第三个状态操作区间已经结束但求和子数组还在继续。这个状态使用原值。它只能从“正在操作”的状态转移过来表示操作刚刚结束或者从自己上一轮的状态延续过来表示操作早就结束了。每遍历一个元素更新这三个状态的顺序很关键先用上一轮的“正在操作”和“操作已结束”状态去更新新的“操作已结束”状态再用上一轮的“还没开始操作”和“正在操作”状态去更新新的“正在操作”状态最后用上一轮的“还没开始操作”状态去更新新的“还没开始操作”状态。这样做的目的是避免同一轮里状态互相覆盖保证每个状态用的都是上一轮的值。在每一步更新完之后用当前轮得到的“正在操作”状态和“操作已结束”状态去尝试更新全局最大值。为什么不直接考虑“还没开始操作”的状态因为题目要求必须执行一次操作最终求和子数组必须至少包含一个被乘过或除过的元素。只使用原值的子数组没有执行操作不符合要求。当整个数组扫描完一遍后就得到了这种操作模式下的最大可能和。然后换另一种操作模式再扫描一遍最后返回两种模式中的较大值。以示例 nums [1, -2, 3, 4, -5]k 2 为例在乘法模式下可以选择子数组 [3, 4] 乘以 2数组变成 [1, -2, 6, 8, -5]。此时和最大的子数组是 [6, 8]和为 14。除法模式不会得到更大的结果所以最终答案是 14。时间复杂度每种操作模式只需要从左到右扫描一次数组乘法模式和除法模式各扫描一次总共是两次线性扫描。因此总时间复杂度是 O(n)其中 n 是 nums 的长度。额外空间复杂度整个过程中只使用了常数个变量来保存三个状态和当前最大值没有使用额外的数组或递归栈。因此总额外空间复杂度是 O(1)。Go完整代码如下packagemainimport(fmtmath)funcmaxSubarraySum(nums[]int,kint)int64{solve:func(isMulbool)int64{res:int64(math.MinInt)varf0,f1,f2int64for_,x:rangenums{x:int64(x)y:xifisMul{y*int64(k)}else{y/int64(k)}f2max(f1,f2)x f1max(f0,f1,0)y f0max(f0,0)x resmax(res,f1,f2)}returnres}returnmax(solve(true),solve(false))}funcmain(){nums:[]int{1,-2,3,4,-5}k:2result:maxSubarraySum(nums,k)fmt.Println(result)}Python完整代码如下# -*-coding:utf-8-*-fromtypingimportListdefmax_subarray_sum(nums:List[int],k:int)-int:deftrunc_div(a:int,b:int)-int:# Python 的 // 对负数向下取整这里改成向 0 取整ifa0:returna//breturn-((-a)//b)defsolve(is_mul:bool)-int:res-10**30f0f1f20forxinnums:yx*kifis_mulelsetrunc_div(x,k)f2max(f1,f2)x f1max(f0,f1,0)y f0max(f0,0)x resmax(res,f1,f2)returnresreturnmax(solve(True),solve(False))if__name____main__:nums[1,-2,3,4,-5]k2resultmax_subarray_sum(nums,k)print(result)C完整代码如下#includebits/stdc.husingnamespacestd;longlongmaxSubarraySum(vectorintnums,intk){autosolve[](boolisMul)-longlong{longlongresnumeric_limitslonglong::min();longlongf00,f10,f20;for(intv:nums){longlongxv;longlongyx;if(isMul){y*k;}else{// C 整数除法对负数也是向 0 截断符合题目要求y/k;}f2max(f1,f2)x;f1max({f0,f1,0LL})y;f0max(f0,0LL)x;resmax({res,f1,f2});}returnres;};returnmax(solve(true),solve(false));}intmain(){vectorintnums{1,-2,3,4,-5};intk2;longlongresultmaxSubarraySum(nums,k);coutresultendl;return0;}
延伸阅读

更多相关文章

2026/10/2 8:28:20

AI编程工具Skills机制全解:安装、选型与自研实战

最近如果你在AI编程工具圈子里冲浪,大概率会被一个词反复刷屏:skills。Claude Code这边刚把Agent Skills做成核心功能,OpenAI Codex那边已经有人用skills跑完整套数学建模流程,连OpenCode、superpowers这些项目都在往这个方向挤。…

2026/10/2 8:28:20

从伏虎冲天到批量处理,ABAP 如何让一招覆盖整批业务对象

今天查到《天之痕》的绝技资料时,一个细节直接决定了这道类比题的方向,拓拔玉儿的「伏虎冲天」是自带的全体攻击绝技。玩家整理的绝技表将其列为全体伤害,而不是只针对一个敌人的单体攻击。我们不必把伤害数值搬进程序设计,真正值得借用的是它的作用方式,一次发动,覆盖当…

2026/10/2 8:28:20

从Keil迁移到CLion:STM32+JLink GDB Server调试环境搭建指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 13:58:37

Token命中率:LLM推理的“隐形加速器”

一、Token命中率到底是什么?1.1 从KV Cache说起LLM以自回归方式生成文本:每生成一个新Token,都需要“回头看”前面所有Token的Key和Value张量来计算注意力。如果每次生成都重新计算全部历史Token的K/V,计算量会随序列长度线性增长…

2026/10/2 13:58:37

(132页PPT)精益生产现场管理和改善(附下载方式)

篇幅所限,本文只提供部分资料内容,完整资料请看下面链接 https://download.csdn.net/download/AI_data_cloud/88338604 资料解读:精益生产现场管理和改善 详细资料请看本解读文章的最后内容。 这份精益生产现场管理与改善的专业资料&#…

2026/10/2 13:53:36

【第2 章】WorkBuddy 从入门到高手

WorkBuddy 从入门到高手(第 2章):核心能力,办公六件套全拆解(超详细案例版) 这是一套面向「完全没用过 WorkBuddy」读者的系统学习路线,总共 7 章。本文是第 3 章。 系列目录:第 0 章…

2026/10/2 8:16:46

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/10/1 17:09:46

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 10:48:55

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/2 0:02:57

PWN入门:从栈溢出原理到ROP链实战

1. 这不是“学PWN”,是重新理解你每天敲的每一行C代码我第一次在CTF赛场上写出能控制程序流的exp时,手抖得连gdb的c命令都输错三次。那道题只有23行C代码,一个gets()调用,一个printf(),一个return——它甚至没开NX&…

2026/10/2 0:02:57

Windows下cudaMallocHost显存占用之谜:WDDM与TCC模式差异及优化方案

1. 一个反直觉的显存占用现象第一次在 Windows 上看到cudaMallocHost把显存吃掉的时候,我的反应是打开任务管理器反复确认了三遍。明明调用的是主机端锁页内存分配,按 CUDA 文档的说法,这块内存应该落在系统 RAM 里,跟 GPU 的显存…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑