2018美团机器学习方向在线笔试编程题

第一题:无向图

 代码如下:

def min_path(n, B):
    node_list = [0]*(n+1) # 保存节点的距离
    for path in B:
        # 遍历路径,使后一节点距离值等于前一节点距离值加一
        x, y = path
        node_list[y]=node_list[x]+1
    depth=0
    # 找到最大深度
    for i in range(1, n+1):
        depth=max(depth, node_list[i])
    # 计算最短路径,即最深的路径走一遍,其他路径走2遍
    return 2*n-2-depth



if __name__ == '__main__':
    n=int(input().strip())
    B=[]
    # 得到路径列表
    for i in range(n-1):
        A=[int(i) for i in input().strip().split(" ")]
        if A[0]>A[1]:
            A[0], A[1] = A[1], A[0] # 使得第一个元素小于第二个元素
        B.append(A)
    B.sort(key=lambda x:x[0])# 按第一个元素排序
    result=min_path(n,B)
    print(result)

运行结果:

4
1 2
1 3
3 4
4

 

 

第二题:字符串:

# 思路:确定填充每相邻K个0得到的总长度

代码如下:

N,k = [int(i) for i in input().strip().split(" ")]
list=[int(i) for i in input().strip().split(" ")]
zero_ind=[]
for i in range(N):
    if list[i]==0:
        zero_ind.append(i+1)
zero_ind.append(N+1)
max_len=zero_ind[k-1]
for i in range(k+1, len(zero_ind)):
    max_len=max(max_len, zero_ind[i]-zero_ind[i-k-1]-1)
print(max_len)

 运行:

10 2
1 0 0 1 0 1 0 1 0 1
5

Process finished with exit code 0

 

转载于:https://www.cnblogs.com/tsdblogs/p/9605638.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值