1. 程式人生 > >美團筆試2018/9/10

美團筆試2018/9/10

第一題:無向圖

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)

第二題:字串:

# 思路:確定填充每相鄰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)