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

深入解析 LeetCode 1470:重新排列数组

引用

在算法刷题的实践中,数组的重排问题是考察对元素索引规律和遍历策略理解的经典题型。LeetCode 1470 题“重新排列数组”就是这类问题的典型代表,它要求我们根据特定的元素分组规律,将数组重新排列为指定的格式,既考察了对数组结构的分析能力,也考验了遍历与元素赋值的代码实现技巧。

一、问题概述

1.1 问题描述

LeetCode 1470 题要求我们处理一个长度为 2n 的数组 nums,该数组初始格式为 [x₁,x₂,...,xₙ,y₁,y₂,...,yₙ],需要将其重新排列为 [x₁,y₁,x₂,y₂,...,xₙ,yₙ] 的格式并返回重排后的数组。

1.2 示例解析

· 示例 1:

输入 nums = [2,5,1,3,4,7],n = 3。其中 x₁=2, x₂=5, x₃=1,y₁=3, y₂=4, y₃=7,重排后数组为 [2,3,5,4,1,7]。

· 示例 2:

输入 nums = [1,2,3,4,4,3,2,1],n = 4。重排后数组为 [1,4,2,3,3,2,4,1]。

· 示例 3:

输入 nums = [1,1,2,2],n = 2。重排后数组为 [1,2,1,2]。

二、解题思路

2.1 核心规律分析

观察数组的重排要求,我们可以发现以下关键规律:

· 原数组的前 n 个元素是 x 组(x₁ 到 xₙ),后 n 个元素是 y 组(y₁ 到 yₙ)。

· 重排后的数组需要按照“x₁,y₁,x₂,y₂,...,xₙ,yₙ”的顺序排列,即第 i 个 x 元素(下标 i,0 ≤ i < n)需要和第 i 个 y 元素(下标 n + i)交替放置。

2.2 遍历与赋值策略

基于上述规律,我们可以采用一次遍历,交替赋值的策略:

· 初始化一个长度为 2n 的结果数组 arr。

· 遍历 x 组的每个元素下标 index(从 0 到 n·1),在结果数组中依次放置 nums[index](x 元素)和 nums[index + n](y 元素)。

三、代码实现与逐句解析

3.1 完整代码

```java

class Solution {public int[] shuffle(int[] nums, int n) {int[] arr = new int[2 * n];int index = 0;for (int i = 0; i < 2 * n; i += 2) {arr[i] = nums[index];arr[i + 1] = nums[index + n];index++;}return arr;}}

```

3.2 代码逐句解析

· int[] arr = new int[2 * n];:创建一个长度为 2n 的结果数组,用于存储重排后的元素。

· int index = 0;:初始化 x 组元素的下标指针 index,从 0 开始遍历 x 组。

· for (int i = 0; i < 2 * n; i += 2):遍历结果数组的下标,每次递增 2,因为每次需要放置一个 x 元素和一个 y 元素。

· arr[i] = nums[index];:将当前 x 组的元素(nums[index])放置到结果数组的第 i 位。

· arr[i + 1] = nums[index + n];:将对应的 y 组元素(nums[index + n])放置到结果数组的第 i+1 位。

· index++;:x 组的下标指针后移,准备处理下一个 x 元素。

· return arr;:返回重排后的结果数组。

四、复杂度分析

4.1 时间复杂度

算法的时间复杂度为 O(n),其中 n 是 x 组(或 y 组)的元素数量。我们只需遍历 x 组的 n 个元素,每个元素的赋值操作是 O(1),因此总时间复杂度与数组规模线性相关。

4.2 空间复杂度

算法的空间复杂度为 O(n),主要是用于存储结果数组的空间(长度为 2n,属于 O(n) 级别)。

五、边界情况与测试用例分析

5.1 边界情况

· n = 1:此时数组长度为 2,重排后格式为 [x₁,y₁],如输入 [a,b] 输出 [a,b]。

· n = 500:达到题目中 n 的最大值限制,算法仍能在 O(500) 时间内完成,性能优异。

5.2 测试用例验证

· 示例 1 验证:

输入 nums = [2,5,1,3,4,7],n = 3。遍历过程:

· index = 0:arr[0] = 2,arr[1] = 3(nums[0+3] = nums[3] = 3)。

· index = 1:arr[2] = 5,arr[3] = 4(nums[1+3] = nums[4] = 4)。

· index = 2:arr[4] = 1,arr[5] = 7(nums[2+3] = nums[5] = 7)。

最终数组 [2,3,5,4,1,7],与示例输出一致。

· 示例 2 验证:

输入 nums = [1,2,3,4,4,3,2,1],n = 4。遍历过程:

· index = 0:arr[0] = 1,arr[1] = 4(nums[0+4] = nums[4] = 4)。

· index = 1:arr[2] = 2,arr[3] = 3(nums[1+4] = nums[5] = 3)。

· index = 2:arr[4] = 3,arr[5] = 2(nums[2+4] = nums[6] = 2)。

· index = 3:arr[6] = 4,arr[7] = 1(nums[3+4] = nums[7] = 1)。

最终数组 [1,4,2,3,3,2,4,1],与示例输出一致。

· 示例 3 验证:

输入 nums = [1,1,2,2],n = 2。遍历过程:

· index = 0:arr[0] = 1,arr[1] = 2(nums[0+2] = nums[2] = 2)。

· index = 1:arr[2] = 1,arr[3] = 2(nums[1+2] = nums[3] = 2)。

最终数组 [1,2,1,2],与示例输出一致。

六、算法思想拓展与应用场景

6.1 算法思想拓展

本题的“交替赋值”思路可推广至其他数组重排或元素分组问题,例如:

· 将两个等长数组合并为“交叉排列”的形式(如 [a1,a2] 和 [b1,b2] 合并为 [a1,b1,a2,b2])。

· 对数组按特定索引规律进行元素重排(如根据奇偶下标、区间分组等规律)。

6.2 应用场景

该算法可应用于以下实际场景:

· 数据预处理:在某些机器学习任务中,需要将特征数组和标签数组按“特征·标签”的顺序交叉排列,以便后续按批次处理。

· 前端交互:处理用户输入的成对数据(如“问题·答案”“选项·分值”),按交叉格式展示或存储。

· 游戏开发:对游戏中的资源数组(如“道具·数量”)进行交叉重排,便于资源的批量加载与管理。

七、总结

LeetCode 1470 题“重新排列数组”通过交替赋值的一次遍历策略,高效地解决了数组的重排需求。其核心在于识别 x 组和 y 组元素的索引规律,通过一次遍历同时处理两个组的元素,将时间复杂度优化至 O(n),空间复杂度优化至 O(n)。

这道题的解题过程体现了“规律识别→策略设计→代码实现”的完整思维链路。掌握这种针对数组结构的分析与操作能力,不仅能解决本题,还能迁移到各类数组重排、元素分组的算法问题中,为实际开发中的数据处理场景提供高效的解决方案。​

http://www.dtcms.com/a/586147.html

相关文章:

  • 第23集科立分板机:自动分板机操作规范指南
  • 基于ZYNQ的软硬件协同加速实时高清视频处理系统:从概念到实现
  • Linux 软链接与硬链接详解:Android 系统源码开发实战指南
  • ModelScope使用技巧总结详解
  • 手机网站自动适配二手电商怎么做
  • 定积分的几何应用(一):平面图形面积计算详解
  • Kubernetes V1.24+ Docker运行时 grafana容器指标显示异常
  • 建设网站的风险wordpress上一篇文章
  • 面对撞库 网站应该怎么做珠海网站建设公司怎么样
  • STM32 F103外部晶振8MHz改为12MHz,如何配置?
  • 网站建设必须要具备哪些知识自己做的视频可以传别的网站去吗
  • 网站报名照片怎么做广告设计公司员工荣誉证书
  • 常见的静态网站开发技术邢台网站建设优化
  • 如何做二维码链接网站做网站需要提供些什么页面
  • 定积分的几何应用(二):旋转体体积与曲线弧长计算详解
  • overflow-hidden >选择器(11.8 1.5hour)
  • Git 连续提交生成 patch
  • 中山做网站价格推荐聊城做网站
  • 手机网站 怎么开发wordpress添加验证码
  • LangGraph长短期记忆实践
  • 招商网站建站开发app需要多少资金
  • 中国建设银行网站首页u盾登入2345浏览器在线
  • 网站里面的数据库是怎么做的网站建设温州科目一
  • ES6 import语法
  • 2025.11.08 力扣每日一题
  • SAP 模具生产订单创建接口分享
  • 网页游戏挂机软件试分析网站推广和优化的原因
  • 做网站框架网站开发调查表
  • Unreal5 从入门到精通之 学习Niagara特效系统
  • 安装方法的比较