LeetCode 1929. Concatenation of Array
题目描述
给你一个长度为 n 的整数数组 nums。请你构建一个长度为 2n 的答案数组 ans,ans 由两个 nums 数组串联形成。形式化地,ans[i] == nums[i] 且 ans[i + n] == nums[i](0 <= i < n)。返回数组 ans。
示例 1:
1 | 输入:nums = [1,2,1] |
示例 2:
1 | 输入:nums = [1,3,2,1] |
解题思路
本题要求将原数组与自己拼接一次,核心是构造一个长度为 2n 的新数组,其中前 n 个元素与原数组完全相同,后 n 个元素也是原数组的副本。
在 Python 中,列表的 + 运算符本身就是序列拼接操作,它会创建一个新的列表对象,其中包含左侧列表的全部元素,随后紧接右侧列表的全部元素。这与题目要求的”串联”语义完全一致。
分析步骤:
nums是一个包含n个元素的整数列表。- 表达式
nums + nums将nums与自身拼接,结果是一个长度为2n的新列表。 - 对于任意索引
i(0 <= i < n),ans[i]等于nums[i],ans[i + n]也等于nums[i],满足题目要求。
这种直接拼接的方式无需显式循环、无需逐个拷贝元素,代码极简且高效,充分利用了 Python 内置列表拼接的底层优化(底层 C 实现会一次性分配好结果列表所需的内存空间并批量拷贝指针)。
复杂度分析
- 时间复杂度:
O(n),其中n为数组长度。列表拼接操作需要将两个列表中的所有元素拷贝到新列表中,每个元素访问一次。 - 空间复杂度:
O(n),需要创建一个长度为2n的新列表作为返回值,不计算输入占用的空间。
代码
1 | from typing import List |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 𝒞𝒶𝓃𝒶𝓇𝓎!