LeetCode 1470. Shuffle the Array
题目描述
给你一个数组 nums,数组中有 2n 个元素,按 [x1,x2,...,xn,y1,y2,...,yn] 的格式排列。请你将数组按 [x1,y1,x2,y2,...,xn,yn] 格式重新排列,返回重排后的数组。
例如:nums = [2,5,1,3,4,7],n = 3,输出 [2,3,5,4,1,7]。
解释:x1=2, x2=5, x3=1,y1=3, y2=4, y3=7,交错排列得 [2,3,5,4,1,7]。
解题思路
核心思想
这是一个数组重排问题,本质是双指针或交错填充。给定 n,我们知道:
x部分的元素在nums[0]到nums[n-1]。y部分的元素在nums[n]到nums[2n-1]。
目标是将两个部分交错:x1, y1, x2, y2, ..., xn, yn。
步骤
- 创建结果数组
ans,长度为2n。 - 使用指针
i在结果数组中填充,使用指针j遍历 x 部分和 y 部分:- 每次迭代,先放入
nums[j](来自 x 部分),然后放入nums[j + n](来自 y 部分)。 j从 0 到n-1。
- 每次迭代,先放入
示例
以 nums = [2,5,1,3,4,7],n = 3 为例:
- j=0:ans[0]=nums[0]=2, ans[1]=nums[3]=3
- j=1:ans[2]=nums[1]=5, ans[3]=nums[4]=4
- j=2:ans[4]=nums[2]=1, ans[5]=nums[5]=7
- 结果:
[2,3,5,4,1,7]
复杂度分析
- 时间复杂度:
O(n),一次遍历即可完成。 - 空间复杂度:
O(n)(不计结果数组),结果数组长度为2n。
代码
1 | package code.J1470; |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 𝒞𝒶𝓃𝒶𝓇𝓎!