滴滴笔试——算法

第二题:给出一个n个结点的树,树上每条边权值都是1,这n个结点中有m个特殊点,请你求出树上距离这m个特殊点距离均不超过d的点的数量,包含特殊点。

代码如下:

class TwoNode(object):
    def __init__(self,data=None,previous=None,next=None):
        self.previous=previous
        self.data=data
        self.next=next

n,m,d=6,2,3
mm=[5,4]
parent=[3,4,5,6,1]
if n-1<=d:
    print(n-1)
node=TwoNode(2,None,None)
for i in range(n-1):
    pp=TwoNode(parent[i])
    pp.next=node
    node.previous=pp
    node=node.previous
    #print(node.data)

#print(p1.data)
res=[[] for i in range(m)]
for i in range(m):
    p1=node
    ssp=TwoNode(mm[i],None,None)
    #print(ssp.data)
    a=ssp.data
    #print(a)
    while p1.data != mm[i] and p1.next!=None:
        #print(p1.data,end=" ")
        p1=p1.next
        #print(p1.data) 
    print()
    count1=0
    count2=0
    p2=p1
    #print(p2.data)
    p3=p1
    res[i].append(p1.data)
    while count1<d and p2.next!=None:
        p2=p2.next
        count1+=1
        res[i].append(p2.data)
    #print(count1)
    while count2<d and p3.previous!=None:
        p3=p3.previous
        count2+=1
        #print(count2,end=" ")
        res[i].append(p3.data)
print(res)

resu=[]
for j in range(1,n+1):
    flag=True
    #print(j)
    for i in range(m):
        #print(res[i])
        if not j in res[i]:
            flag=False
            #print(flag)
    if flag==True:
        resu.append(j)
        #print(resu)
        
resul=len(resu)
print(resul)

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值