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)]
目录
相关文章
|
2月前
|
监控 安全 Unix
iOS 崩溃排查不再靠猜!这份分层捕获指南请收好
从 Mach 内核异常到 NSException,从堆栈遍历到僵尸对象检测,阿里云 RUM iOS SDK 基于 KSCrash 构建了一套完整、异步安全、生产可用的崩溃捕获体系,让每一个线上崩溃都能被精准定位。
622 72
|
23天前
|
数据采集 人工智能 IDE
告别碎片化日志:一套方案采集所有主流 AI 编程工具
本文介绍了一套基于MCP架构的轻量化、多AI工具代码采集方案,支持CLI、IDE等多类工具,实现用户无感、可扩展的数据采集,已对接Aone日志平台,助力AI代码采纳率分析与研发效能提升。
398 46
告别碎片化日志:一套方案采集所有主流 AI 编程工具
|
1月前
|
人工智能 安全 API
Nacos 安全护栏:MCP、Agent、配置全维防护,重塑 AI Registry 安全边界
Nacos安全新标杆:精细鉴权、无感灰度、全量审计!
678 66
|
29天前
|
存储 缓存 调度
阿里云Tair KVCache仿真分析:高精度的计算和缓存模拟设计与实现
在大模型推理迈向“智能体时代”的今天,KVCache 已从性能优化手段升级为系统级基础设施,“显存内缓存”模式在长上下文、多轮交互等场景下难以为继,而“以存代算”的多级 KVCache 架构虽突破了容量瓶颈,却引入了一个由模型结构、硬件平台、推理引擎与缓存策略等因素交织而成的高维配置空间。如何在满足 SLO(如延迟、吞吐等服务等级目标)的前提下,找到“时延–吞吐–成本”的最优平衡点,成为规模化部署的核心挑战。
460 38
阿里云Tair KVCache仿真分析:高精度的计算和缓存模拟设计与实现
|
30天前
|
SQL 人工智能 分布式计算
从工单、文档到结构化知识库:一套可复用的 Agent 知识采集方案
我们构建了一套“自动提取 → 智能泛化 → 增量更新 → 向量化同步”的全链路自动化 pipeline,将 Agent 知识库建设中的收集、提质与维护难题转化为简单易用的 Python 工具,让知识高效、持续、低门槛地赋能智能体。
312 36
|
3天前
|
数据可视化 安全 数据库
OpenClaw(Clawdbot)一键极速部署及2026年调用 iMessage 完整教程
OpenClaw作为开源自托管AI代理工具,前身为Moltbot、Clawdbot,支持对接多种主流通讯平台,其中iMessage作为苹果生态专属通讯工具,可通过配置实现与OpenClaw的联动,让用户通过iMessage直接下达自然语言指令、接收任务执行结果,适配苹果设备用户的移动办公与智能交互需求。本教程基于2026年OpenClaw最新版本,全程围绕macOS系统操作(iMessage调用需依赖macOS环境),涵盖前置准备、依赖安装、配置实操、配对验证及常见问题排查,步骤清晰适配新手,同时规避官方未提及的核心坑点,确保调用顺畅。
412 4
|
29天前
|
设计模式 XML NoSQL
从HITL(Human In The Loop) 实践出发看Agent与设计模式的对跖点
本文探讨在ReactAgent中引入HITL(人机回路)机制的实践方案,分析传统多轮对话的局限性,提出通过交互设计、对话挂起与工具化实现真正的人机协同,并揭示Agent演进背后与工程设计模式(如钩子、适配器、工厂模式等)的深层关联,展望未来Agent的进化方向。
506 44
从HITL(Human In The Loop) 实践出发看Agent与设计模式的对跖点
|
30天前
|
缓存 API Python
Python 3.9+ 新特性:字典合并的优雅之道
Python 3.9+ 新特性:字典合并的优雅之道
314 137
|
23天前
|
存储 人工智能 自然语言处理
GEO优化:成功前奏的关键布局与实操清单
本文将深入探讨GEO优化的前期关键布局,并提供一份实操清单,帮助企业在AI时代抢占先机。
168 8
|
30天前
|
人工智能 自然语言处理 API
数据合成篇|多轮ToolUse数据合成打造更可靠的AI导购助手
本文提出一种面向租赁导购场景的工具调用(Tool Use)训练数据合成方案,以支付宝芝麻租赁助理“小不懂”为例,通过“导演-演员”式多智能体框架生成拟真多轮对话。结合话题路径引导与动态角色交互,实现高质量、可扩展的合成数据生产,并构建“数据飞轮”推动模型持续优化。实验表明,该方法显著提升模型在复杂任务中的工具调用准确率与多轮理解能力。
290 43
数据合成篇|多轮ToolUse数据合成打造更可靠的AI导购助手