腾讯算法笔试问题,求解答

菜鸡只A了一道,一个30%,一个随便输出a了18%
只写一下记得的题目
1.找最长的符合(长度为偶数,左递减,右递增,最低点值相同)的子字符串长度。
自己写的也蒙蒙的,思路是找两个相同的数再计算左长度右长度。。。
2.方程解的问题,直接跳过。。。
3.绳子剪短期望,跳过
4.圆环内有六个数,判断是否存在两个相同的圆环。AC
if __name__=="__main__":
    t = int(input())
    for i in range(t):
        m = int(input())
        flag = 0
        unique = set()
        for j in range(m):
            s = list(map(int,input().split()))
            s = sorted(s)
            s = ''.join(list(map(str,s)))
            if s in unique:
                flag = 1
            else:
                unique.add(s)
        if flag==0:
            print('NO')
        else:
            print('YES')
5.从一个点到另外的点再回来这个点的最短路径,通过30%。不知道哪里有问题,求解答
def helper(roadDic,start,nums,l):
    res = [float('+inf')]*(l+1)
    res[start]=0
    queue = [start]
    while(queue):
        cur = queue.pop(0)
        for road in roadDic[cur]:
            if road[1]+res[cur]<res[road[0]]:
                res[road[0]] = road[1]+res[cur]
            queue.append(road[0])
        if cur==nums:
            ra = res[nums]
            break
    return ra
if __name__=="__main__":
    nums,roads,times = list(map(int,input().split()))
    roadDic = {}
    for i in range(roads):
        temp = list(map(int,input().split()))
        if temp[0] not in roadDic:
            roadDic[temp[0]]=[(temp[1],temp[2])]
        else:
            roadDic[temp[0]].append((temp[1],temp[2]))
    l = nums
    print((helper(roadDic,1,nums,l)+helper(roadDic,nums,1,l))*times)



#腾讯##笔试题目#
全部评论

相关推荐

1 2 评论
分享
牛客网
牛客企业服务