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