2026-07-18:可排序整数求和。用go语言,给定一个长度为 n 的整数数组 nums。 现在考虑所有的正整数 k,要求 k 能够整除 n(即 k 是 n 的因数)。 对于这样的每个 k,我们把数

发布时间:2026/7/18 16:43:31

2026-07-18:可排序整数求和。用go语言,给定一个长度为 n 的整数数组 nums。 现在考虑所有的正整数 k,要求 k 能够整除 n(即 k 是 n 的因数)。 对于这样的每个 k,我们把数
2026-07-18可排序整数求和。用go语言给定一个长度为 n 的整数数组 nums。现在考虑所有的正整数 k要求 k 能够整除 n即 k 是 n 的因数。对于这样的每个 k我们把数组按顺序分成若干个长度都为 k 的小段最后一段不会多余因为 k 整除 n。然后允许我们对每一小段内部独立地做任意次数的循环平移可以向左或向右旋转任意步数。如果经过这样处理之后整个数组能够变成非递减的顺序从小到大排列那么就称 k 是一个“可排序整数”。最后请你找出所有满足条件的 k并把它们相加返回这个总和。1 n nums.length 100000。1 nums[i] 100000。输入 nums [3,1,2]。输出 3。解释​​​​​​​对于 n 3可能的因数是 1 和 3。对于 k 1每个子数组都只有一个元素。无法通过移动使数组排序。对于 k 3单个子数组 [3, 1, 2] 可以通过左移一次得到 [1, 2, 3]从而将数组排序。只有 k 3 可排序因此答案是 3。题目来自力扣3886。第一步理解题目要求我们有一个数组nums长度n。只考虑那些能整除n的正整数k即n % k 0。将数组切成连续的、长度都为k的小段。每一段内部可以任意次数地循环平移左移或右移任意步数。如果经过这些段内平移之后整个数组能够变成全局非递减的升序允许相等那么这个k就是“可排序整数”。最后把全部“可排序整数”加起来返回总和。第二步对于给定的k判断其是否可行的核心思路要判断一个k是否可行我们可以一段一段地检查。每个段内部的元素可以通过循环平移得到任意循环排列因此我们需要知道每一段经过平移后能形成的最小值和最大值以及它们之间的相对顺序限制。比如如果一段内部本来就是非递减的那么它不用平移就符合要求不过可以平移但没必要。如果一段内部不是单调递增的那么它的唯一可能的平移后有序情况是该段必须恰好由一个下降点分成两个递增区间然后将这两个区间交换顺序相当于旋转一次才能成为升序。因此我们需要提前知道每个位置“下一个递减开始的位置”。第三步预处理 —— 记录“下一个递减位置”代码中有一个数组nextDec长度为n。nextDec[i]表示从索引i开始往后第一个满足nums[j] nums[j1]的位置j。更准确地说nextDec[i]存放的是这个“下降位置”的索引。如果从i到末尾都是递增的则nextDec[i] n一个越界标记。例如数组[3, 1, 2]从位置 0 看3 1所以下降位置是 0nextDec[0] 0从位置 1 看1 2后面没有下降所以nextDec[1] 3从位置 2 看末尾nextDec[2] 3这个预处理很方便我们判断一个子数组[l, r]是不是“至多只有一个下降点”并确定哪部分是递增的。第四步定义检查函数solve(k)这个函数判断长度为k的段是否可行并累计可行的k。我们遍历整个数组按长度k分块对于每个块的起始位置l和结束位置r取m nextDec[l]即从 l 开始的第一个下降位置。情况一m r说明从l到r完全递增。那么这个段本身就有序不需要平移。它必须满足它的最小值nums[l]≥ 上一段的最大值因为整体要保持非递减。如果满足就更新当前“上一段最大值”为nums[r]。否则直接返回k不可行。情况二m r说明这段内部存在一个下降并且根据递减的定义m是第一个下降位置。这意味着[l, m]这一段是递增的而[m1, r]这一段也应该在原始数组中递增否则会存在第二个下降点就无法通过一次旋转变成有序。于是我们需要检查nextDec[m1] r表示存在第二个下降点 → 直接失败。第二段的最小值nums[m1]必须 ≥ 上一段的最大值否则拼接时会出现下降。第二段的最大值nums[r]必须 ≤ 第一段的最小值nums[l]因为平移后我们通常把第二段放到前面相当于旋转。如果满足这些条件那么平移后可以有序更新上一段最大值为第一段的最大值nums[m]因为平移后第一段在后面。当所有段都通过检查则k可行累加到答案中。第五步枚举所有因子 k因为k必须是n的因子我们可以只枚举因子不用遍历 1…n。做法从k 1到sqrt(n)检查n % k 0检查k如果k*k ! n再检查n/k这样就能遍历所有正因子。第六步返回总和所有可行的k累加到ans最后返回。例子nums [3, 1, 2]n 3因子有 1, 3预处理nextDec[0, 3, 3]k 1每个块长度 1第一块 [3]上一段最大值 lastMax 0nums[l]3 ≥ 0 通过lastMax3第二块 [1]1 ≥ 3不成立失败。所以 1 不可行。k 3一个块 [3,1,2]l0r2mnextDec[0]0因为 m r所以属于情况二nextDec[m1] nextDec[1] 3等于 r1没有第二个下降通过。nums[m1]nums[1]1 ≥ lastMax0通过。nums[r]nums[2]2 ≤ nums[l]3通过。更新 lastMax nums[m] nums[0] 3。没有更多段成功。所以 3 可行。答案 3。时间和空间复杂度分析时间复杂度预处理nextDec需要 O(n)。枚举因子数量是 O(√n)。每个因子检查时会遍历数组一遍即 O(n)。总复杂度为 O(n * d(n))其中 d(n) 是因子个数。因子个数最大在 n ≤ 1e5 时很少通常几十个可以认为是 O(n √n) 的宽松上界但实际因子数很小可以认为是 O(n * τ(n))在本题限制下可行。额外空间复杂度只用了nextDec数组长度 n因此额外空间为 O(n)。Go完整代码如下packagemainimport(fmt)funcsortableIntegers(nums[]int)(ansint){n:len(nums)nextDec:make([]int,n)// nums[nextDec[i]] nums[nextDec[i] 1]nextDec[n-1]n p:n// 对于每个 i记录下一个递减的位置fori:n-2;i0;i--{ifnums[i]nums[i1]{pi}nextDec[i]p}solve:func(kint){lastMax:0// 上一段的最大值forr:k-1;rn;rk{l:r-k1m:nextDec[l]ifmr{// [l, r] 是递增的最小值为 nums[l]最大值为 nums[r]// 最小值必须 上一段的最大值ifnums[l]lastMax{return}lastMaxnums[r]}else{// [l, m] 是第一段[m1, r] 是第二段// 第二段必须是递增的且第二段的最小值必须 上一段的最大值且第二段的最大值必须 第一段的最小值ifnextDec[m1]r||nums[m1]lastMax||nums[r]nums[l]{return}lastMaxnums[m]}}ansk// 满足要求}// 枚举 n 的因子 kfork:1;k*kn;k{ifn%k0{solve(k)ifk*kn{solve(n/k)}}}return}funcmain(){nums:[]int{3,1,2}result:sortableIntegers(nums)fmt.Println(result)}Python完整代码如下# -*-coding:utf-8-*-defsortableIntegers(nums):nlen(nums)ans0# next_dec[i] 表示从 i 开始第一个递减的位置# 即 nums[next_dec[i]] nums[next_dec[i] 1]next_dec[n]*n pnforiinrange(n-2,-1,-1):ifnums[i]nums[i1]:pi next_dec[i]pdefsolve(k):nonlocalans last_max0# 上一段的最大值forrinrange(k-1,n,k):lr-k1mnext_dec[l]ifmr:# [l, r] 是递增的最小值为 nums[l]最大值为 nums[r]# 最小值必须 上一段的最大值ifnums[l]last_max:returnlast_maxnums[r]else:# [l, m] 是第一段[m1, r] 是第二段# 第二段必须是递增的且第二段的最小值必须 上一段的最大值# 且第二段的最大值必须 第一段的最小值ifnext_dec[m1]rornums[m1]last_maxornums[r]nums[l]:returnlast_maxnums[m]ansk# 满足要求# 枚举 n 的因子 kk1whilek*kn:ifn%k0:solve(k)ifk*kn:solve(n//k)k1returnans# 测试if__name____main__:nums[3,1,2]resultsortableIntegers(nums)print(result)C完整代码如下#includeiostream#includevectorusingnamespacestd;intsortableIntegers(vectorintnums){intnnums.size();intans0;// nextDec[i] 表示从 i 开始第一个递减的位置// 即 nums[nextDec[i]] nums[nextDec[i] 1]vectorintnextDec(n,n);intpn;for(intin-2;i0;i--){if(nums[i]nums[i1]){pi;}nextDec[i]p;}// 使用 lambda 表达式定义 solve 函数autosolve[](intk){intlastMax0;// 上一段的最大值for(intrk-1;rn;rk){intlr-k1;intmnextDec[l];if(mr){// [l, r] 是递增的最小值为 nums[l]最大值为 nums[r]// 最小值必须 上一段的最大值if(nums[l]lastMax){return;}lastMaxnums[r];}else{// [l, m] 是第一段[m1, r] 是第二段// 第二段必须是递增的且第二段的最小值必须 上一段的最大值// 且第二段的最大值必须 第一段的最小值if(nextDec[m1]r||nums[m1]lastMax||nums[r]nums[l]){return;}lastMaxnums[m];}}ansk;// 满足要求};// 枚举 n 的因子 kfor(intk1;k*kn;k){if(n%k0){solve(k);if(k*kn){solve(n/k);}}}returnans;}intmain(){vectorintnums{3,1,2};intresultsortableIntegers(nums);coutresultendl;return0;}

相关新闻

Timeline Scan:精准标注照片日期,让家庭照片有序整理不再难!

Timeline Scan:精准标注照片日期,让家庭照片有序整理不再难!

2026/7/18 16:33:31

Timeline Scan:家庭照片整理神器各位,如果你已经是 Timeline Scan 的用户,可直接登录仪表盘。Timeline Scan 能实现家庭照片的数字化、标注日期和有序整理。其官网有主页、定价、常见问题解答、关于我们、联系我们、照片扫描等板块。为家庭照…

企业知识管理困境破解:金曲AI知识库落地实践分享

企业知识管理困境破解:金曲AI知识库落地实践分享

2026/7/18 16:33:31

很多企业在数字化转型过程中,普遍面临知识管理难题:技术文档、行业规范、项目资料分散存放,资料查找低效、知识复用率低。同时,内部知识沉淀混乱、权限管控薄弱,跨部门共享困难,公有云AI工具还存在数据外泄…

微信聊天记录本地化备份解决方案:实现个人数据自主管理

微信聊天记录本地化备份解决方案:实现个人数据自主管理

2026/7/18 16:33:31

微信聊天记录本地化备份解决方案:实现个人数据自主管理 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCh…

开关电源芯片架构与关键电路设计解析

开关电源芯片架构与关键电路设计解析

2026/7/18 17:53:34

1. 开关电源芯片的核心架构解析开关电源芯片作为现代电子设备的"心脏",其内部电路设计直接决定了电源转换效率、稳定性和可靠性。典型的开关电源芯片包含以下几个关键模块:基准电压源是芯片内部最精密的电路之一,通常采用带隙基准(…

2024最后72小时紧急补救:用ChatGPT重构年终总结的「可信度增强协议」——含自检清单、数据锚点植入法、风险话术替换表

2024最后72小时紧急补救:用ChatGPT重构年终总结的「可信度增强协议」——含自检清单、数据锚点植入法、风险话术替换表

2026/7/18 17:53:34

更多请点击: https://codechina.net 第一章:2024年终总结的可信度危机与AI介入必要性 当数十万份自动生成的“年度技术复盘”在12月中旬批量涌入内部Wiki、GitHub Pages和邮件归档系统时,一个隐性危机浮出水面:超过68%的团队总结…

C语言基础回顾(2026/7/18)

C语言基础回顾(2026/7/18)

2026/7/18 17:53:34

目录 指针 1. 地址、&、* 2.容易混淆的点: 3. 指针类型 4.指针和数组 5. 字符串指针 6. 指针传参 7.指针指向 8.const 与指针 ①:锁内容 ②:锁指针 ③:双锁 ④:总结记忆点 9.volatile与const ①&…

arcgispro错误000210无法创建输出

arcgispro错误000210无法创建输出

2026/7/18 17:53:34

在运行模型构建器当中的成对相交时&#xff0c;报错error000210无法创建<文件夹>&#xff0c;可以尝试在保存的数据库路径下创建要素数据集&#xff0c;将输出的矢量保存到要素数据集当中。

晶振类型详解:无源与有源晶振的工作原理与选型指南

晶振类型详解:无源与有源晶振的工作原理与选型指南

2026/7/18 17:53:34

1. 晶振基础概念与分类在电子工程领域&#xff0c;晶振&#xff08;Crystal Oscillator&#xff09;就像电子设备的心脏起搏器&#xff0c;为数字电路提供稳定的时钟信号。我第一次接触晶振是在大学电子设计竞赛时&#xff0c;当时因为选错了晶振类型导致整个FPGA开发板无法正常…

无刷电机耐用性分析与维护指南

无刷电机耐用性分析与维护指南

2026/7/18 17:43:34

1. 无刷电机耐用性深度解析 无刷电机&#xff08;Brushless DC Motor&#xff09;作为现代电动设备的核心动力部件&#xff0c;其耐用性表现直接影响着设备的使用寿命和维护成本。与传统有刷电机相比&#xff0c;无刷电机通过电子换向取代机械电刷&#xff0c;这一根本性差异带…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/18 14:07:00

Unity游戏文本翻译架构深度解析&#xff1a;XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/17 17:34:09

openEuler Raspberry Pi Kernel设备驱动开发指南&#xff1a;为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/18 5:51:23

openEuler系统集成测试实战&#xff1a;基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载&#xff1a;…

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

2026/7/18 0:02:02

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;从模糊意图到可执行指令&#xff1a;Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则 在Claude驱动的产品需求文档&#xff08;PRD&#xff09;生成实践中&#xff0c;原始业务意图往往以自然语言片…

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

2026/7/18 0:02:02

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Cursor配置生成失效&#xff1f;3大隐藏陷阱4行修复代码&#xff0c;资深工程师连夜整理的紧急补救清单 Cursor 配置生成突然失效&#xff0c;是近期高频报障场景。表面看是 cursor.config.json 未更新或 LSP…

某智驾大牛创业

某智驾大牛创业

2026/7/18 0:02:02

作者&#xff1a;钟声编辑&#xff1a;Mark出品&#xff1a;红色星际头图&#xff1a;智能驾驶图片据悉&#xff0c;国内某头部智驾公司端到端模型技术大牛Z投身创业&#xff0c;并且已经拿到融资。Z不仅是该头部公司内部最年轻的对标阿里P10级别技术负责⼈&#xff0c;更是业内…