LeetCode 1929. Concatenation of Array
题目描述
给你一个长度为 n 的整数数组 nums。请你构建一个长度为 2n 的答案数组 ans,ans 由两个 nums 数组串联形成。ans[i] == nums[i] 且 ans[i + n] == nums[i]。
例如:nums = [1,2,1],输出 [1,2,1,1,2,1]。
解释:数组 ans 由两个 [1,2,1] 串联组成。
解题思路
核心思想
这是一个非常直接的数组操作问题,本质上是将原数组复制两遍拼接到一起。具体做法是:
- 创建一个长度为
2n的新数组ans。 - 遍历原数组,将每个元素
nums[i]分别放到ans[i]和ans[i + n]两个位置。 - 一次遍历即可完成。
步骤
ans = new int[nums.length * 2]- 对于
i从0到nums.length - 1:ans[i] = nums[i]ans[i + nums.length] = nums[i]
- 返回
ans。
示例说明
以 nums = [1,2,1] 为例:
- n = 3,ans 长度为 6
- i=0:ans[0]=1, ans[3]=1
- i=1:ans[1]=2, ans[4]=2
- i=2:ans[2]=1, ans[5]=1
- 结果:
[1,2,1,1,2,1]
更简洁的写法
也可以使用 System.arraycopy():
1 | int[] ans = new int[nums.length * 2]; |
复杂度分析
- 时间复杂度:
O(n),一次遍历原数组。 - 空间复杂度:
O(n)(不计结果数组),结果数组长度为2n。
代码
1 | package code.J1929; |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 𝒞𝒶𝓃𝒶𝓇𝓎!