腾讯算法笔试问题,求解答
菜鸡只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)