首页 > 美团829笔试 算法
头像
666ml的可乐
编辑于 2020-08-29 18:16
+ 关注

美团829笔试 算法

1.简单 AC
while True:
    try:
        n=int(input())
        T=input()
        flag=0
        begin,end=len(T)-1,0
        for i in range(len(T)):
            if flag==0 and T[i]=='M':
                flag=1
            elif flag==1 and T[i]=='T':
                begin=i+1
                break
        flag=0
        for i in range(len(T)-1,-1,-1):
            if flag==0 and T[i]=='T':
                flag=1
            elif flag==1 and T[i]=='M':
                end=i-1
                break

        if begin<=end:
            print (T[begin:end+1])
        else:
            print("")
    except:
        break
2.也比较简单 AC
while True:
    try:
        n=int(input())
        a=[]
        for i in range(n):
            a.append([int(s) for s in input().split()])

        flag=[0]*n
        res=[]
        for i in range(n):
            for j in a[i]:
                if flag[j-1]==0:
                    flag[j-1]=1
                    res.append(j)
                    break

        print(' '.join([str(r) for r in res]))
    except:
        break
3.这道题我是拓扑排序,看拓扑排序长度。一直是73% 可能是超时
while True:
    try:
        
        n,x,y=map(int,input().split())
        edge=[]
        for i in range(n-1):
            uu,vv=map(int,input().split())
            edge.append((uu,vv))

        path={}
        
        for uu,vv in edge:
            if uu in path:
                path[uu].append(vv)
            else:
                path[uu]=[vv]
            if vv in path:
                path[vv].append(uu)
            else:
                path[vv]=[uu]
        print(path)
        res=-1
        visited=[0]*(n+1)
        q=[x]

        while q:
            res+=1
            q1=q
            q=[]
            for s in q1:
                for pq1 in path[s]:
                    if visited[pq1]==0:
                        visited[pq1]=1
                        q.append(pq1)
        print(res)
    except:
        break
4、AC。我的思路是先找出每个数字的左右边界,然后l从1到m判断l是否合理,如果合理的话,r就从m开始遍历到l,找到符合要求的数量就ok了。
while True:
    try:
        m,n=map(int,input().split())

        seq=list(map(int,input().split()))
        di={}
        for i in range(n):
            if seq[i] not in di:
                di[seq[i]]=[i,i]
            else:
                max_i,min_i=di.get(seq[i])
                di[seq[i]]=[max(max_i,i),min(min_i,i)]

        res=0

        for i in range(1,m+1):
            mi,ma=0,n
            flag=0
            for j in range(1,i):
                if j not in di:
                    continue
                max_j,min_j=di.get(j)
                if min_j>=mi:
                    mi=max_j
                else:
                    flag=1
                    break
            if flag==1:continue

            res+=1
            for j in range(m,i,-1):
                if j not in di:
                    res+=1
                    continue
                max_j,min_j=di.get(j)
                if max_j<=ma and min_j>=mi:
                    res+=1
                    ma=min_j
                else:
                    break

        print(res)
    except:
        break






全部评论

(3) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐