华为 9.9笔试



第一题:完美序列 90%
n=int(input())
nums1=list(map(int,input().split()))
nums2=list(map(int,input().split()))
m=int(input())
nums3=list(map(int,input().split()))
nums4=list(map(int,input().split()))
if (nums1[0] not in nums3) and (nums2[0] not in nums4):
    print(0)
else:
    for i in range(m):
        if i>m-n:
            print(0)
            break
        else:  
            if nums3[i]==nums1[0]:
                cur=0
                Flag=True
                for j in range(i,i+n):
                    
                    if nums3[j]==nums1[cur] and nums4[j]==nums2[cur]:
                        cur+=1
                    else:
                        Flag=False
                        break
                if Flag==True:
                    print(i+1)
                    break
第二题:最长递减子序列,一开始用dp,发现不对,还可以向上走,改用dfs。
n,m=map(int,input().split())
path,res=[],[]
for _ in range(n):
    path=list(map(int,input().split()))
    res.append(path)
direct=[(0,1),(0,-1),(-1,0),(1,0)]
dp=[[0]*m for _ in range(n)]
def dfs(i,j):
    if  dp[i][j]!=0:
        return dp[i][j]
    dp[i][j]=1
    for dx,dy in direct:
        x,y=i+dx,j+dy
        if 0<=x<n and 0<=y<m and  res[x][y]<res[i][j]:
            dp[i][j]=max(dp[i][j],1+dfs(x,y))
    return dp[i][j]
max_=0
for i in range(n):
    for j in range(m):
        max_=max(max_,dfs(i,j))
print (max_)
第三题:二叉树最大异或路径和(类似)
递归写的,不知哪里出错了,全局变量处理错了,不会。




#笔试题目##华为#
全部评论
第二第三题总共写了20分钟AC,第一题为了解决超时调试了一个小时2333
2 回复 分享
发布于 2020-09-09 21:11
应该把1.9这个选项单独列出来
2 回复 分享
发布于 2020-09-09 21:18
第一题只能90%……
1 回复 分享
发布于 2020-09-09 21:09
第二题dfs+记忆化一样思路,代码也基本一样,为甚么我只过了25
点赞 回复 分享
发布于 2020-09-09 21:10
第一题只有30%,后面两题ac了😂
点赞 回复 分享
发布于 2020-09-09 21:10
def dfs(matrix,path,i,j,cache):     if(cache[i][j] != 0):         return cache[i][j]     for k in range(len(path)):         x,y = i+path[k][0],j+path[k][1]         if(x >= 0 and x < len(matrix) and y >= 0 and y < len(matrix[0]) and matrix[i][j] > matrix[x][y]):             cache[i][j] = max(cache[i][j],dfs(matrix,path,x,y,cache))     cache[i][j] = cache[i][j] + 1     return cache[i][j] line = input().split() m = int(line[0]) n = int(line[1]) matrix = list() cache = list() for i in range(m):     line = input().split()     matrix.append(list())     cache.append(list())     for j in range(n):         matrix[i].append(line[j])         cache[i].append(0) if(m == 0):     print(0) else:     path = [[-1,0],[0,-1],[1,0],[0,1]]     mmax = 0     for i in range(m):         for j in range(n):             mmax = max(mmax,dfs(matrix,path,i,j,cache))     print(mmax)
点赞 回复 分享
发布于 2020-09-09 21:10
题解题解:https://blog.csdn.net/qq_38649940/article/details/108501724
点赞 回复 分享
发布于 2020-09-09 21:14
第一题思路是啥啊?我暴力查找只能过60%,KMP算法又记不住了
点赞 回复 分享
发布于 2020-09-09 21:17
有人知道多少分算过吗
点赞 回复 分享
发布于 2020-09-09 21:19
没人第三道求成了异或吗?
点赞 回复 分享
发布于 2020-09-09 21:24
楼楼你第一题代码是不是错的啊。
点赞 回复 分享
发布于 2020-09-09 21:27
坑爹啊,最后一题输入顺序是不是乱的,查了好久都查不出错,测试能过,以提交就是0
点赞 回复 分享
发布于 2020-09-09 21:39
什么时候有测评通知啊
点赞 回复 分享
发布于 2020-09-10 12:55

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
3 16 评论
分享
牛客网
牛客企业服务