news 2026/6/15 16:03:32

力扣解题-[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/6/15 15:01:34

智能化圈舍组态设计

智能化圈舍组态设计 第一章 绪论 传统养殖圈舍依赖人工巡检、经验化管理&#xff0c;存在环境调控滞后、疫病预警不及时、养殖效率低等问题&#xff0c;难以适配规模化、精细化养殖的发展需求。智能化圈舍组态设计以工业组态软件为核心&#xff0c;融合传感器网络、自动控制、数…

作者头像 李华
网站建设 2026/6/15 13:38:39

写作小白救星!千笔,冠绝行业的降AIGC工具

在AI技术迅速发展的今天&#xff0c;越来越多的学生开始借助AI工具辅助论文写作&#xff0c;以提高效率和内容质量。然而&#xff0c;随着各大查重系统对AI生成内容的识别能力不断提升&#xff0c;"AI率超标"问题逐渐成为学术写作中的隐形障碍。许多学生在使用各类降…

作者头像 李华
网站建设 2026/6/15 15:02:24

【Fine-tuning】 详解:Feature Extraction、Linear Probing 与 End-to-End 的区别

​ 在深度学习实践中&#xff0c;我们很少从零开始训练一个模型。更常见的做法是&#xff1a;基于预训练模型&#xff0c;通过迁移学习解决新任务。 ​ 而在迁移学习中&#xff0c;Fine-tuning&#xff08;微调&#xff09; 是最核心、也最容易混淆的概念之一。 ​ 本文将系统…

作者头像 李华
网站建设 2026/6/15 13:33:21

MyEMS开源能源管理系统:赋能化学药品原料药制造业绿色低碳转型

各位读者&#xff0c;大家好&#xff01;我今天向大家介绍的是MyEMS开源能源管理系统。在双碳目标的大背景下&#xff0c;化学药品原料药制造业作为高耗能领域&#xff0c;面临着巨大的减排压力和能源管理挑战。 MyEMS开源能源管理系统具有零授权成本、高度定制化、社区协同迭代…

作者头像 李华
网站建设 2026/6/15 12:58:40

智能服装在不同领域技术下的发展现状及趋势研究

智能服装在不同领域技术下的发展现状及趋势研究 摘要 智能服装作为纺织工业、柔性电子、物联网、人工智能与新材料技术深度融合的产物&#xff0c;突破了传统服装仅具备遮蔽、保暖与装饰的基础功能&#xff0c;实现了生理感知、环境交互、运动监测、健康管理、安全防护、数字…

作者头像 李华