题目描述

给你一个长度为 n 的整数数组 nums。请你构建一个长度为 2n 的答案数组 ansans 由两个 nums 数组串联形成。形式化地,ans[i] == nums[i]ans[i + n] == nums[i]0 <= i < n)。返回数组 ans

示例 1:

1
2
输入:nums = [1,2,1]
输出:[1,2,1,1,2,1]

示例 2:

1
2
输入:nums = [1,3,2,1]
输出:[1,3,2,1,1,3,2,1]

解题思路

本题要求将原数组与自己拼接一次,核心是构造一个长度为 2n 的新数组,其中前 n 个元素与原数组完全相同,后 n 个元素也是原数组的副本。

在 Python 中,列表的 + 运算符本身就是序列拼接操作,它会创建一个新的列表对象,其中包含左侧列表的全部元素,随后紧接右侧列表的全部元素。这与题目要求的”串联”语义完全一致。

分析步骤:

  1. nums 是一个包含 n 个元素的整数列表。
  2. 表达式 nums + numsnums 与自身拼接,结果是一个长度为 2n 的新列表。
  3. 对于任意索引 i0 <= i < n),ans[i] 等于 nums[i]ans[i + n] 也等于 nums[i],满足题目要求。

这种直接拼接的方式无需显式循环、无需逐个拷贝元素,代码极简且高效,充分利用了 Python 内置列表拼接的底层优化(底层 C 实现会一次性分配好结果列表所需的内存空间并批量拷贝指针)。

复杂度分析

  • 时间复杂度: O(n),其中 n 为数组长度。列表拼接操作需要将两个列表中的所有元素拷贝到新列表中,每个元素访问一次。
  • 空间复杂度: O(n),需要创建一个长度为 2n 的新列表作为返回值,不计算输入占用的空间。

代码

1
2
3
4
5
from typing import List


def getConcatenation(nums: List[int]) -> List[int]:
return nums + nums