跳至主要內容

1929. 数组串联

ITCharge大约 2 分钟

1929. 数组串联open in new window

  • 标签:数组
  • 难度:简单

题目链接

题目大意

描述:给定一个长度为 nn 的整数数组 numsnums

要求:构建一个长度为 2×n2 \times n 的答案数组 ansans,答案数组下标从 00 开始计数 ,对于所有 0i<n0 \le i < nii ,满足下述所有要求:

  • ans[i]==nums[i]ans[i] == nums[i]
  • ans[i+n]==nums[i]ans[i + n] == nums[i]

具体而言,ansans 由两个 numsnums 数组「串联」形成。

说明

  • n==nums.lengthn == nums.length
  • 1n10001 \le n \le 1000
  • 1nums[i]10001 \le nums[i] \le 1000

示例

  • 示例 1:
输入:nums = [1,2,1]
输出:[1,2,1,1,2,1]
解释:数组 ans 按下述方式形成:
- ans = [nums[0],nums[1],nums[2],nums[0],nums[1],nums[2]]
- ans = [1,2,1,1,2,1]
  • 示例 2:
输入:nums = [1,3,2,1]
输出:[1,3,2,1,1,3,2,1]
解释:数组 ans 按下述方式形成:
- ans = [nums[0],nums[1],nums[2],nums[3],nums[0],nums[1],nums[2],nums[3]]
- ans = [1,3,2,1,1,3,2,1]

解题思路

思路 1:按要求模拟

  1. 定义一个数组变量(列表)ansans 作为答案数组。
  2. 然后按顺序遍历两次数组 numsnums 中的元素,并依次添加到 ansans 的尾部。最后返回 ansans

思路 1:代码

class Solution:
    def getConcatenation(self, nums: List[int]) -> List[int]:
        ans = []
        for num in nums:
            ans.append(num)
        for num in nums:
            ans.append(num)
        return ans

思路 1:复杂度分析

  • 时间复杂度O(n)O(n),其中 nn 为数组 numsnums 的长度。
  • 空间复杂度O(n)O(n)。如果算上答案数组的空间占用,则空间复杂度为 O(n)O(n)。不算上则空间复杂度为 O(1)O(1)

思路 2:利用运算符

Python 中可以直接利用 + 号运算符将两个列表快速进行串联。即 return nums + nums

思路 2:代码

class Solution:
    def getConcatenation(self, nums: List[int]) -> List[int]:
        return nums + nums

思路 2:复杂度分析

  • 时间复杂度O(n)O(n),其中 nn 为数组 numsnums 的长度。
  • 空间复杂度O(n)O(n)。如果算上答案数组的空间占用,则空间复杂度为 O(n)O(n)。不算上则空间复杂度为 O(1)O(1)