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 == nadjacentPairs.length == n - 1adjacentPairs[i].length == 22 <= 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)\)