2.6力扣每日一题-3379转换数组

简介: 本题要求将循环数组 nums 转换为新数组 result:对每个下标 i,按 nums[i] 正负决定左右移动步数(0 则保持),在循环数组中定位目标下标并赋值。关键在于用 `(i + nums[i]) % n`(配合模运算处理负数)高效计算等价下标。代码简洁,时间复杂度 O(n)。

3379. 转换数组 - 力扣(LeetCode)

视频讲解:https://t.bilibili.com/1166681192552988677?share_source=pc_native

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

我们先抛开数组下标为非负数这个要求,将nums视为一个向两侧无穷延伸的循环数组。题目说如果nums[i]<0,就向左移动abs(nums[i])位,即左移后的下标为i-abs(nums[i]),即为i+nums[i].

也就是说,无论nums[i]是正或是负,移动后的下标都为i+nums[i],只不过这个i+nums[i]可能大于等于数组的长度或小于0.例如数组长度为4,那么下标1,5,9和下标-3,-7,-11对应的数值是一样的,在这里我们称其为等价的下标。

简化问题:也就是说,我们要解决的问题是,对于一个长度为m的数组nums来说,我们如何找到与i+nums[i]等价的下标,且该下标对nums来说是有效的?

image.png

可见,将x调整为y,只需对m取模,加m,再整体对m取模即可。

Java

class Solution {
   
    public int[] constructTransformedArray(int[] nums) {
   
        int m = nums.length;
        int[] res = new int[m];
        for(int i=0;i<m;i++) {
   
            res[i] = nums[((i + nums[i]) % m + m) % m];
        }
        return res;
    }
}

Go

func constructTransformedArray(nums []int) []int {
   
    m := len(nums)
    res := make([]int,m)
    for i,v := range nums {
   
        res[i] = nums[((i + v) % m + m) % m]
    }
    return res
}

C++

class Solution {
   
public:
    vector<int> constructTransformedArray(vector<int>& nums) {
   
        int m = nums.size();
        vector<int>res(m,0);
        for(int i=0;i<m;i++) {
   
            res[i] = nums[((i + nums[i]) % m + m) % m];
        }
        return res;
    }
};

Python

class Solution:
    def constructTransformedArray(self, nums: List[int]) -> List[int]:
        n = len(nums)
        return [nums[(i + v) % n] for i, v in enumerate(nums)]
目录
相关文章
|
6月前
|
人工智能 运维 数据可视化
OpenClaw(Clawdbot)及skills 2026年阿里云部署指南:3步得到24小时AI助理
2026年开源AI智能体领域迎来全新发展阶段,OpenClaw(曾用名Clawdbot、Moltbot)凭借**自然语言驱动任务执行、多工具集成联动、7×24小时不间断运行**的核心优势,成为个人办公自动化与轻量团队协作的首选工具。与传统聊天机器人不同,OpenClaw能真正落地执行系统操作、浏览器自动化、文档处理、数据抓取等实际任务,通过对接阿里云百炼大模型,可实现中文场景下的高精度推理与毫秒级响应,完美适配国内用户的使用需求。
597 1
|
4月前
|
JSON 前端开发 JavaScript
基于LangChain的简易智能旅游助手Agent
本文分享基于LangChain开发的智能旅游助手Agent,支持“查天气+荐景点”双功能,对比ReAct与FunctionCall两种实现模式,并详解工具封装、记忆管理、执行框架等LangChain核心优势。代码开源,含FastAPI后端与原生HTML/JS前端。
440 3
|
5月前
|
存储 缓存 NoSQL
Redis主从复制
Redis主从复制通过全量同步、命令传播与增量复制三大机制,保障高可用与数据一致性。主节点处理读写并同步数据,从节点分担读请求;借助repl_backlog_buffer环形缓冲区与偏移量机制,实现断线后高效增量恢复,有效避免单点故障与数据丢失。
261 0
|
3月前
|
弹性计算 安全 关系型数据库
阿里云服务器2核2G、2核4G、4核8G、8核16G怎么选实例?最新活动价格对比与实例规格选择指南
本文介绍了2026年阿里云服务器2核2G、2核4G、4核8G、8核16G配置的最新活动价格及选购指南。阿里云为个人开发者、初创团队及轻量级业务企业提供多样入门配置选择,如2核2G轻量应用服务器仅38元一年,2核4G配置199元包年。对于业务规模扩大或应用复杂度提升的用户,阿里云提供4核8G与8核16G配置,价格从1252.63元到5958.52元一年不等,满足不同性能需求。用户可根据业务需求和预算,在阿里云丰富产品线与优惠策略中选配最合适的云服务器实例。
|
8月前
|
监控 安全 Unix
iOS 崩溃排查不再靠猜!这份分层捕获指南请收好
从 Mach 内核异常到 NSException,从堆栈遍历到僵尸对象检测,阿里云 RUM iOS SDK 基于 KSCrash 构建了一套完整、异步安全、生产可用的崩溃捕获体系,让每一个线上崩溃都能被精准定位。
2540 160
|
2月前
|
存储 Linux KVM
虚拟机搭建教程(三)
教程来源 https://bncne.cn/ Windows 11虚拟机安装需注意:启用vTPM与Secure Boot、分配≥4GB内存/64GB磁盘、选NAT联网;遇限制可执行OOBE\BYPASSNRO跳过;常见问题含虚拟化未开、无网络、卡顿等,对应BIOS设置、关Hyper-V、装VMware Tools即可解决。
|
4月前
|
人工智能 Shell 开发者
自动化内容生产实践:narrator-ai-cli 影视解说全自动化工作流攻略
本文介绍命令行工具 narrator-ai-cli,助力影视解说高效创作:本地处理素材、云端智能生成,支持全自动/分步/Agent 驱动三模式,低门槛接入AI工作流,无需高性能GPU,适配抖音、B站等多平台。(239字)
|
6月前
|
存储 供应链 安全
智慧医疗·区域云HIS源码一体化协同平台 (SaaS版)
专为集团医院、医共体打造的云原生医疗SaaS平台,基于“中心协同、扁平管理”理念,实现全域资源集成与数据共享。覆盖临床、患者服务、供应链及运营监控四大中心,支持五级EMR、医保实时结算、智能预警与多维BI,开箱即用。
|
7月前
|
芯片
PD Sink受电端快充协议芯片PW6606
PW6606是一款高集成度的PD Sink受电端快充协议芯片。其核心特点是广泛兼容PD3.1/3.0/2.0、QC、主流快充协议,并集成多重保护。它的核心作用是作为设备端的“智能电力谈判官”,在具体操作中:当设备通过Type-C接口接入充电器时,PW6606会自动检测并识别充电器支持的协议;如PD协议,通过CC引脚与充电器进行通信协商,请求设置的快充电压(如5V,9V,12V,15V,20V);如20V,当充电器没有20V时。会向下兼容改15V(12V,9V,5V逐级)诱骗到合适的电压
|
8月前
|
人工智能 运维 机器人
3000万人问AI什么?千问这份榜单让老金看懂了2025年真相
加我进AI讨论学习群,公众号右下角“联系方式”文末有老金的 开源知识库地址·全免费