1743. 从相邻元素对还原数组#
问题描述#
存在一个由
n
个不同元素组成的整数数组nums
,但你已经记不清具体内容。好在你还记得nums
中的每一对相邻元素。给你一个二维整数数组
adjacentPairs
,大小为n - 1
,其中每个adjacentPairs[i] = [ui, vi]
表示元素ui
和vi
在nums
中相邻。题目数据保证所有由元素
nums[i]
和nums[i+1]
组成的相邻元素对都存在于adjacentPairs
中,存在形式可能是[nums[i], nums[i+1]]
,也可能是[nums[i+1], nums[i]]
。这些相邻元素对可以 按任意顺序 出现。返回 原始数组
nums
。如果存在多种解答,返回 其中任意一个 即可。
示例 1:
输入:adjacentPairs = [[2,1],[3,4],[3,2]] 输出:[1,2,3,4] 解释:数组的所有相邻元素对都在 adjacentPairs 中。 特别要注意的是,adjacentPairs[i] 只表示两个元素相邻,并不保证其 左-右 顺序。
示例 2:
输入:adjacentPairs = [[4,-2],[1,4],[-3,1]] 输出:[-2,4,1,-3] 解释:数组中可能存在负数。 另一种解答是 [-3,1,4,-2] ,也会被视作正确答案。
示例 3:
输入:adjacentPairs = [[100000,-100000]] 输出:[100000,-100000]
提示:
nums.length == n
adjacentPairs.length == n - 1
adjacentPairs[i].length == 2
2 <= n <= 105
-105 <= nums[i], ui, vi <= 105
- 题目数据保证存在一些以
adjacentPairs
作为元素对的数组nums
解题思路#
最左边 和 最右边 的数字在 \(\texttt{nums}\) 中只出现一次,其他数字都出现两次。可以选择只出现一次的两个数字中的其中一个作为开始,然后迭代寻找相邻的数字,并保证数字不重复出现。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
时间复杂度:\(\mathcal{O}(n)\)
空间复杂度:\(\mathcal{O}(n)\)