news 2026/5/8 20:51:56

力扣解题-[3379]转换数组

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣解题-[3379]转换数组

力扣解题-[3379]转换数组

题目:
给你一个整数数组 nums,它表示一个循环数组。请你遵循以下规则创建一个大小 相同 的新数组 result :

对于每个下标 i(其中 0 <= i < nums.length),独立执行以下操作:
如果 nums[i] > 0:从下标 i 开始,向 右 移动 nums[i] 步,在循环数组中落脚的下标对应的值赋给 result[i]。
如果 nums[i] < 0:从下标 i 开始,向 左 移动 abs(nums[i]) 步,在循环数组中落脚的下标对应的值赋给 result[i]。
如果 nums[i] == 0:将 nums[i] 的值赋给 result[i]。
返回新数组 result。

注意:由于 nums 是循环数组,向右移动超过最后一个元素时将回到开头,向左移动超过第一个元素时将回到末尾。

示例 1:

输入: nums = [3,-2,1,1]

输出: [1,1,1,3]

解释:

对于 nums[0] 等于 3,向右移动 3 步到 nums[3],因此 result[0] 为 1。
对于 nums[1] 等于 -2,向左移动 2 步到 nums[3],因此 result[1] 为 1。
对于 nums[2] 等于 1,向右移动 1 步到 nums[3],因此 result[2] 为 1。
对于 nums[3] 等于 1,向右移动 1 步到 nums[0],因此 result[3] 为 3。
示例 2:

输入: nums = [-1,4,-1]

输出: [-1,-1,4]

解释:

对于 nums[0] 等于 -1,向左移动 1 步到 nums[2],因此 result[0] 为 -1。
对于 nums[1] 等于 4,向右移动 4 步到 nums[2],因此 result[1] 为 -1。
对于 nums[2] 等于 -1,向左移动 1 步到 nums[1],因此 result[2] 为 4。
提示:

1 <= nums.length <= 100
-100 <= nums[i] <= 100
Related Topics
数组
模拟


第一次解答

解题思路

核心方法:模拟循环移动过程 + 逐步调整目标索引,直接贴合题目描述的移动规则,逻辑直观易懂,无需复杂数学运算。

具体步骤:

  1. 首先获取输入数组nums的长度length,并初始化一个与nums长度相同的结果数组result,用于存储最终转换结果。
  2. 遍历输入数组nums的每个下标i,针对每个下标执行独立的转换操作:
    a. 获取当前下标i对应的数组值value = nums[i]
    b. 计算初始目标索引targetNum = i + value(核心逻辑:向右移动对应value为正,索引直接累加;向左移动对应value为负,索引直接递减,无需额外区分正负,统一用加法即可贴合题目移动规则)。
    c. 处理目标索引超出数组上限的情况(对应向右移动超出末尾回到开头):通过while循环,若targetNum >= length,则不断减去数组长度length,直到targetNum落入有效索引范围[0, length)
    d. 处理目标索引低于数组下限的情况(对应向左移动超出开头回到末尾):通过while循环,若targetNum < 0,则不断加上数组长度length,直到targetNum落入有效索引范围[0, length)
    e. 此时targetNum为合法的循环落脚下标,将nums[targetNum]赋值给result[i],完成当前下标的转换。
  3. 遍历完成后,返回结果数组result

执行耗时:1 ms,击败了100.00% 的Java用户
内存消耗:46 MB,击败了40.00% 的Java用户

publicint[]constructTransformedArray(int[]nums){intlength=nums.length;int[]result=newint[length];for(inti=0;i<length;i++){intvalue=nums[i];inttargetNum=i+value;while(targetNum>=length){targetNum=targetNum-length;}while(targetNum<0){targetNum=targetNum+length;}result[i]=nums[targetNum];}returnresult;}

第二次解答

解题思路

核心方法:利用取模运算直接求解有效循环索引,借助循环数组的数学特性,替代第一次解答中的循环调整,简化索引计算逻辑,同时优化内存消耗。

具体步骤:

  1. 首先获取输入数组nums的长度length,并初始化一个与nums长度相同的结果数组result,用于存储最终转换结果。
  2. 遍历输入数组nums的每个下标i,针对每个下标执行独立的转换操作:
    a. 计算初始目标索引并进行第一次取模:newIndex = (i + nums[i]) % length(取模运算的核心特性:可快速得到一个数除以另一个数的余数,天然适配循环数组的索引循环特性,替代多次加减数组长度的循环操作)。
    b. 处理负余数情况(当i + nums[i]为负数时,取模结果可能为负,超出有效索引范围):若newIndex < 0,则给newIndex加上数组长度length,将其转换为正的有效索引。
    c. 额外执行一次取模校验newIndex %= length:确保经过上一步调整后的索引仍严格落在[0, length)范围内,避免极端情况(如newIndex等于length)导致的数组越界。
    d. 此时newIndex为合法的循环落脚下标,将nums[newIndex]赋值给result[i],完成当前下标的转换。
  3. 遍历完成后,返回结果数组result

核心优化点说明:

  • 取模运算替代while循环调整索引,减少了循环迭代的开销,逻辑更简洁高效。
  • 取模运算直接贴合循环数组的数学本质,无需分步模拟“超出边界-回绕”的过程,代码可读性和健壮性更强。

执行耗时:1 ms,击败了100.00% 的Java用户
内存消耗:45.9 MB,击败了72.73% 的Java用户

publicint[]constructTransformedArray(int[]nums){intlength=nums.length;int[]result=newint[length];for(inti=0;i<length;i++){// 计算目标索引:从 i 出发,移动 nums[i] 步(可正可负),循环intnewIndex=(i+nums[i])%length;if(newIndex<0){newIndex+=length;// 转为正索引}newIndex%=length;// 确保在 [0, length)result[i]=nums[newIndex];}returnresult;}

总结

  1. 两次解答均贴合题目「循环数组移动」的核心要求,最终执行耗时一致(1ms),均能高效解决问题。
  2. 第一次解答是「模拟移动 + 循环调整索引」,逻辑直观,贴合题目描述,适合新手理解循环数组的回绕规则。
  3. 第二次解答是「取模运算 + 负索引校正」,利用数学特性简化代码,减少内存消耗,是更优的工程实现方案。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/28 16:27:50

高AI率学术论文的“人工化”蜕变 ——“快降重”深度降AI效果实测

摘要 面对日益严格的学术查重与AIGC检测&#xff0c;如何高效、专业地降低论文AI率&#xff0c;同时保证学术质量与格式规范&#xff0c;成为众多研究者与学生的迫切需求。本次测评聚焦“快降重”平台的“降AI率”功能&#xff0c;通过实测一篇AI占比较高&#xff08;86.7%&…

作者头像 李华
网站建设 2026/4/30 21:32:22

拒绝做“数字仓鼠“:如何用AI激活沉睡的100G个人数据资产?

一、引言&#xff1a;你的硬盘里&#xff0c;埋葬着你的未来 凌晨1点&#xff0c;产品经理小林在准备第二天给腾讯微信事业群WXG的汇报。他的硬盘里躺着3.7TB的资料&#xff1a;过去五年积累的竞品分析报告、用户访谈录音、技术架构文档、行业白皮书。他知道去年Q3做过一份关于…

作者头像 李华
网站建设 2026/4/23 15:18:03

Java 综合练习

主界面//1.召唤主界面 JFrame jFrame new JFrame();菜单制作在菜单中有&#xff1a;JMenuBar、JMenu、JMenuItem三个角色。JMenuBar&#xff1a;如上图中红色边框JMenu&#xff1a;如上图蓝色边框JMenuItem&#xff1a;如上图绿色字体处其中JMenuBar是整体&#xff0c;一个界面…

作者头像 李华
网站建设 2026/4/17 18:27:35

大模型代理推理完全指南:从被动预测到主动行动的范式转变

如果在 2023 年&#xff0c;我们还在为 ChatGPT 能写出一首打油诗而惊叹&#xff0c;那么到了 2026 年的今天&#xff0c;单纯的“文本生成”已经无法满足我们对 AGI 的胃口了。我们痛苦地发现&#xff1a;即便模型参数大到离谱&#xff0c;它依然是一个“被动”的预言家——它…

作者头像 李华
网站建设 2026/5/5 9:28:44

企业选对 AI 人力资源管理系统的秘诀:认准 “真智能” 核心特质

在数字化转型加速的当下&#xff0c;AI 人力资源管理系统已成为企业优化 HR 流程、提升效率的重要工具。但市场上产品良莠不齐&#xff0c;不少标注 “智能” 的系统仅停留在基础自动化层面&#xff0c;并非真正意义上的智能应用。对于 HR 而言&#xff0c;选对一款真正智能的 …

作者头像 李华
网站建设 2026/5/1 14:43:58

智能反射表面的建模与优化设计研究

智能反射表面的建模与优化设计研究 第一章 绪论 随着无线通信向6G演进&#xff0c;频谱资源紧张、信道环境复杂、能耗过高成为核心瓶颈。智能反射表面&#xff08;IRS, Intelligent Reflecting Surface&#xff09;作为一种革命性技术&#xff0c;通过在二维平面上集成大量低…

作者头像 李华