猿辅导一面面试题python题解

有一个数组有n个互不相同的元素,给定这n个元素的相邻关系返回任意一个满足要求的数组 python

题目

有一个数组有n个互不相同的元素,给定这n个元素的相邻关系adjPairs[i] =[a_i, b_i],表示a_i和b_i相邻,adjPairs数组长度为n-1,返回任意一个满足要求的数组 python
eg:
Input: adjPairs = [[4,-2],[1,4],[-3,1]]
Output: [-2,4,1,-3]

题解

当时面试没做出来 后来面试结束自己又思考了一会,觉得这题还挺难的
我用的是哈希表 在python里使用字典建立键值对
key表示列表中的每个数,value表示这个数左右相邻的邻居值的列表
当value长度为1时说明为列表左右端点值
具体python代码实现如下:

def getlist(li):
     if not li:return []
    dic,res,count={},[],0
    for elem in li:
        if elem[0] in dic:
            dic[elem[0]].append(elem[1])
        else:
            tmp=[]
            tmp.append(elem[1])
            dic[elem[0]]=tmp
        if elem[1] in dic:
            dic[elem[1]].append(elem[0])
        else:
            tmp=[]
            tmp.append(elem[0])
            dic[elem[1]]=tmp
    for key,value in dic.items():
        if len(value)==1:
            res.append(key)
            res.append(dic.pop(key)[0])
            break
    for key,value in dic.items():
        if len(value)==2:
            if key==res[-1]:
                for i in range(2):
                    if value[i]!=res[len(res)-2]:
                        res.append(value[i])
                        break
    return res
if __name__=='__main__':
    arr=[[4,-2],[1,4],[-3,1]]
    result=getlist(arr)
    print(result)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值