在Python中从相邻的对中恢复数组的程序
假设我们有一个名为adPair的2D数组,大小为n-1,其中每个adPair[i]有两个元素[ui,vi],表示元素ui和vi在一个名为nums的数组中相邻,在nums中有n个唯一的元素。我们必须找到数组nums。如果有多个解决方案,请返回其中之一。
因此,如果输入如下adPair = [[3,2],[4,5],[4,3]],则输出将是[2,3,4,5]。
为了解决这个问题,我们将按照以下步骤进行 –
- my_map:一个空映射,用于存储不同密钥的列表
- 对于adPair中的每个对(a,b),执行以下操作
- 在my_map [a]的末尾插入b
- 在my_map [b]的末尾插入a
- 对于my_map中的每个键a和值列表l,请执行以下操作
- 如果l的大小与1相同,则
- nums:一个带有两个元素(a,l [0])的列表
- 从循环中退出
- 如果l的大小与1相同,则
- 对于范围为1到adPair大小-1的i,请执行以下操作
- a,b:my_map [nums的最后一个元素]
- 如果a与nums的倒数第二个元素相同,则
- 在nums的末尾插入b
- 否则,
- 在nums的末尾插入a
- 返回nums
示例
让我们看一下以下实现,以便更好地理解-
from collections import defaultdict
def solve(adPair):
my_map = defaultdict(list)
for a, b in adPair:
my_map[a].append(b)
my_map[b].append(a)
for a, l in my_map.items():
if len(l) == 1:
nums = [a, l[0]]
break
for i in range(1, len(adPair)):
a, b = my_map[nums[-1]]
if a == nums[-2]:
nums.append(b)
else:
nums.append(a)
return nums
adPair = [[3,2],[4,5],[4,3]]
print(solve(adPair))
输入
[[3,2],[4,5],[4,3]]
输出
[2, 3, 4, 5]