2026-07-26:将数组转换为交替质数数组的最少操作次数。用go语言,给定一个整数数组 `nums`,你需要通过最少的操作次数,把它变成满足特定规律的数组。 规律是: - 数组中所有索引为偶数的位
2026-07-26将数组转换为交替质数数组的最少操作次数。用go语言给定一个整数数组nums你需要通过最少的操作次数把它变成满足特定规律的数组。规律是数组中所有索引为偶数的位置最终的值必须是质数。所有索引为奇数的位置最终的值必须是非质数。每次操作只能让任意位置的元素加 1。目标是求出让整个数组满足这个条件所需的最少操作次数。1 nums.length 100000。1 nums[i] 100000。输入 nums [1,2,3,4]。输出 3。解释下标 0 处的元素必须是质数。将 nums[0] 1 增加到 2使用 1 次操作。下标 1 处的元素必须是非质数。将 nums[1] 2 增加到 4使用 2 次操作。下标 2 处的元素已经是质数。下标 3 处的元素已经是非质数。总操作次数 1 2 3。题目来自力扣3896。大体步骤如下一、质数预计算阶段在init()函数中代码预先构建了一个质数标记数组notPrime长度为100_004。初始化标记数组notPrime[0]和notPrime[1]被标记为1因为 0 和 1 不是质数。其余位置初始为0表示暂时认为是质数。埃拉托色尼筛法从 2 开始遍历只要i * i mx即i 316左右检查notPrime[i]。如果notPrime[i] 0说明 i 是质数则将 i 的所有倍数从i * i开始标记为1非质数。筛选完成后notPrime[p] 0表示 p 是质数notPrime[p] 1表示 p 不是质数。这里的数组大小取100_004是因为题目中元素最大值是 100000而操作是不断增加数值可能超出原最大值。选用大于 1e5 的下一个质数 100003 再加 1确保在增加过程中查询质数属性时不越界。二、主处理过程minOperations函数遍历输入数组nums对每个元素根据其索引的奇偶性进行不同处理并累加操作次数。遍历数组用for i, x : range nums同时获取索引i和对应的值x。确定目标条件如果i是偶数i % 2 0要求该位置的最终值必须是质数即notPrime[x]最终应该等于0。如果i是奇数i % 2 1要求该位置的最终值必须是非质数即notPrime[x]最终应该等于1。用i % 2正好可以表达这个期望值偶数索引期望notPrime[x] 0奇数索引期望notPrime[x] 1内层循环递增对于当前位置的数值x检查notPrime[x]是否等于i % 2如果不等说明当前值不满足条件。由于只能做“加 1”操作于是将x增加 1同时操作次数ans加 1然后再次判断新x是否满足条件。循环终止条件当notPrime[x] i % 2时停止此时x满足该索引位置的要求偶数索引时 x 是质数奇数索引时 x 是非质数。这个循环保证了每个元素通过最少次数的“加 1”操作达到离它最近的一个满足条件的值向上搜索第一个符合条件的数。累加结果每处理完一个元素其所需的操作次数已经累加到ans中。遍历结束后ans就是整个数组变为交替质数/非质数数组的最少总操作次数。三、示例执行过程以nums [1, 2, 3, 4]为例i0偶数期望质数x1notPrime[1] 1 ≠ 0递增到 2质数操作 1。i1奇数期望非质数x2notPrime[2] 0 ≠ 1递增到 3质数操作 1仍不满足递增到 4非质数操作 1共 2。i2偶数期望质数x3notPrime[3] 0 0已满足操作 0。i3奇数期望非质数x4notPrime[4] 1 1已满足操作 0。总操作次数 1 2 0 0 3。四、时间复杂度分析质数预计算埃氏筛的时间复杂度为 O(M log log M)其中 M 100004。这是一个常数上限所以是 O(1)。主循环对数组中每个元素内层的for循环会让x递增直到找到符合条件的值。在最坏情况下每次可能跨越多个数但每个数最多递增到下一个符合条件的值而质数和非质数的间隔是有限的。由于质数分布相对密集在 1e5 范围内最大间隔不超过几百实际上内层循环执行次数与数组长度 n 成线性关系总体可以认为是 O(n)。如果严格分析每个位置的操作次数等于“到达下一个符合条件的数的距离”所有距离之和不会超过某个常数乘以 n因为数值范围有限质数间隙有界因此仍是 O(n)。总时间复杂度O(n)其中 n 是数组长度。五、空间复杂度分析notPrime 数组大小为 100004 的整型数组占用常数级额外空间O(1)。其他变量只用了几个整型变量i, x, ans 等O(1)。总额外空间复杂度O(1)。Go完整代码如下packagemainimport(fmt)constmx100_004// 1e5 的下一个质数是 1e5 3varnotPrime[mx]int{1,1}funcinit(){fori:2;i*imx;i{ifnotPrime[i]0{forj:i*i;jmx;ji{notPrime[j]1}}}}funcminOperations(nums[]int)(ansint){fori,x:rangenums{// 如果 i 是偶数那么循环直到 notPrime[x] 0x 是质数// 如果 i 是奇数那么循环直到 notPrime[x] 1x 不是质数fornotPrime[x]!i%2{ansx}}return}funcmain(){nums:[]int{1,2,3,4}result:minOperations(nums)fmt.Println(result)}Python完整代码如下# -*-coding:utf-8-*-defmin_operations(nums):mx100004# 1e5 的下一个质数是 1e5 3not_prime[0]*mx not_prime[0]not_prime[1]1# 埃氏筛标记非质数foriinrange(2,int(mx**0.5)1):ifnot_prime[i]0:forjinrange(i*i,mx,i):not_prime[j]1ans0fori,xinenumerate(nums):# 如果 i 是偶数需要 not_prime[x] 0x 是质数# 如果 i 是奇数需要 not_prime[x] 1x 不是质数whilenot_prime[x]!i%2:ans1x1returnansif__name____main__:nums[1,2,3,4]resultmin_operations(nums)print(result)C完整代码如下#includeiostream#includevectorusingnamespacestd;constintmx100004;// 1e5 的下一个质数是 1e5 3intnotPrime[mx]{1,1};// 初始化埃氏筛voidinit(){for(inti2;i*imx;i){if(notPrime[i]0){for(intji*i;jmx;ji){notPrime[j]1;}}}}intminOperations(vectorintnums){intans0;for(inti0;inums.size();i){intxnums[i];// 如果 i 是偶数需要 notPrime[x] 0x 是质数// 如果 i 是奇数需要 notPrime[x] 1x 不是质数while(notPrime[x]!i%2){ans;x;}}returnans;}intmain(){init();// 初始化质数表vectorintnums{1,2,3,4};intresultminOperations(nums);coutresultendl;return0;}

相关新闻

TI MibSPI DMA配置详解:从寄存器解析到实战调试

TI MibSPI DMA配置详解:从寄存器解析到实战调试

1. 项目概述与核心价值在嵌入式开发,尤其是基于TI Hercules或C2000系列MCU的项目中,处理高速、连续的SPI数据流是个绕不开的挑战。想象一下,你的系统需要从多个传感器通过SPI轮询数据,或者向一个高分辨率显示屏持续刷新帧缓存&…

2026/11/5 1:12:49 阅读更多 →
人已经用 WorkBuddy 找工作拿了面试,你还在一份份手工改简历

人已经用 WorkBuddy 找工作拿了面试,你还在一份份手工改简历

文章目录别人已经用 WorkBuddy 找工作拿了面试,你还在一份份手工改简历1\. 先别急着投,看看自己到底适合什么2\. 岗位太多,不要再一页页刷3\. 简历不是写得漂亮,是让对方看见你能干什么4\. 投得一多,先做张表救命5\. 面…

2026/11/6 8:24:04 阅读更多 →
LangGraph 中的 MessagesState

LangGraph 中的 MessagesState

LangGraph 中的 MessagesState(注意官方名称是复数 MessagesState,不是 MessageState)是整个框架专为对话和 Agent 场景预制的内置状态类型。它的核心价值就一句话:用一个带 add_messages reducer 的 messages 字段,把…

2026/11/2 0:22:52 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/8 1:19:03 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/7 12:08:40 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/8 1:35:05 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/8 1:38:41 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/7 12:08:40 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/8 1:23:14 阅读更多 →

日新闻

周新闻

月新闻