当前位置: 首页 > news >正文

LeetCode 3379.转换数组:下标取模

【LetMeFly】3379.转换数组:下标取模

力扣题目链接:https://leetcode.cn/problems/transformed-array/

给你一个整数数组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

解题方法:下标取模

题目啥意思呢?题目意思是:令r e s u l t [ i ] = n u m s [ i + n u m s [ i ] ] result[i] = nums[i + nums[i]]result[i]=nums[i+nums[i]]

但是编程语言中数组n u m s numsnums可不是循环数组,所以需要将i + n u m s [ i ] i+nums[i]i+nums[i]映射到0 ∼ n − 1 0\sim n-10n1(对于支持负数下标的编程语言python也可以映射为负数下标)。

t tt如何映射到0 ∼ n − 1 0\sim n-10n1t % n t\ \%\ nt%n可能为负数,再加上n nn再对n nn取模就好了。

  • 时间复杂度O ( l e n ( n u m s ) ) O(len(nums))O(len(nums))
  • 空间复杂度O ( 1 ) O(1)O(1),算法返回值不计入力扣空间复杂度

AC代码

C++
/* * @LastEditTime: 2026-02-15 18:11:29 */classSolution{public:vector<int>constructTransformedArray(vector<int>&nums){vector<int>ans(nums.size());for(inti=0,n=nums.size();i<n;i++){ans[i]=nums[((i+nums[i])%n+n)%n];}returnans;}};
Python
''' LastEditTime: 2026-02-15 18:13:14 '''fromtypingimportListclassSolution:defconstructTransformedArray(self,nums:List[int])->List[int]:return[nums[(nums[i]+i)%len(nums)]foriinrange(len(nums))]
Java
/* * @LastEditTime: 2026-02-15 18:16:30 */classSolution{publicint[]constructTransformedArray(int[]nums){int[]ans=newint[nums.length];for(inti=0,n=nums.length;i<n;i++){ans[i]=nums[((nums[i]+i)%n+n)%n];}returnans;}}
Go
/* * @LastEditTime: 2026-02-15 18:15:07 */packagemainfuncconstructTransformedArray(nums[]int)[]int{ans:=make([]int,len(nums))n:=len(nums)fori,v:=rangenums{ans[i]=nums[((v+i)%n+n)%n]}returnans}
Rust
/* * @LastEditTime: 2026-02-15 18:23:59 */implSolution{pubfnconstruct_transformed_array(nums:Vec<i32>)->Vec<i32>{letn=nums.len()asi32;letmutans=vec![0;nasusize];foriin0..(nasusize){letj=((nums[i]+iasi32)%n+n)%n;// 如果一路usize会无法得到负数ans[i]=nums[jasusize];}ans}}

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

http://www.jsqmd.com/news/384956/

相关文章:

  • Booster T1 自定义开发全流程与工具链实战指南(从环境到Sim2Real)
  • nodejs: 能在线编辑 Markdown 文档的 Web 服务程序
  • 教你用 Python 批量整理 GIS 可视化 SHP 文件
  • 用 Python 和 ArcPy 批量统计 GIS 指标到 Excel
  • Appium 服务器深度解析
  • 基于SSM的中药销售系统[SSM]-计算机毕业设计源码+LW文档
  • 2026油烟浓度检测仪选购避坑指南与国产实力厂家盘点 - 品牌推荐大师1
  • 使用 ArcPy 批量统一栅格数据的坐标系与范围
  • 别让你的小爱继续“装傻”了!5分钟给它换个“超强AI脑”,好用到全家惊呆!
  • ARM版飞牛NAS系统终于进入了公测
  • 使用 ArcPy 批量统一栅格数据的投影与裁剪
  • 完整教程:【UE5.3 C++】ARPG游戏 06-拾取武器
  • 入门分享篇:一、工欲善其事,必先利其器
  • 使用 ArcPy 统计感兴趣区面积占比并导出 Excel
  • 吃豆人skills - yi
  • 7 学习
  • Linux 中parallel命令
  • 使用 ArcPy 批量处理栅格数据:重采样与矢量裁剪
  • 张兆辉专访:《夜色正浓》沈默的复杂,是成年人的生存真相
  • 大模型API:企业AI应用落地的关键路径
  • 食品X光机选购指南:主流品牌与核心技术全解析
  • ConstraintLayout写法和Box写法比较
  • 2026主流食品X光机深度测评:技术参数与选型指南
  • 大模型API实测:关键指标与选型全解析
  • 并查集进阶
  • mysql的概述
  • 【Harmonyos】开源鸿蒙跨平台训练营DAY2:多终端工程创建运行、代码提交至AtomGit平台自建公开仓库全流程(附带出现问题及解决手段)
  • 【OI】传奇鬼王——SPFA
  • 2026恶臭在线监测设备选购大盘点:实力厂家排行及采购建议 - 品牌推荐大师1
  • 日常被豆包怼