网易互联网笔试统计和题目讨论

2022.3.27




第一题

两个怪物,一个a血,一个b血。

两个技能,一个单体x血,一个群体y血。

求最少需要放几次技能才能干掉怪物。


a,b,x,y 均小于20,大于0


直接暴力搜索+记忆化  a了
a,b,x,y = map(int,input().split(" "))
# print(a,b,type(x))
data= dict()

def  dfs(a,b):
    if a<=0 and b<=0:
        return 0 
    if (a,b) in data:
        return data[(a,b)]
    # 火杀a
    one,two = 1000,1000
    if a>0:

        one = dfs(a-x,b)+1
    if b>0:
        two = dfs(a,b-x)+1
    three = dfs(a-y,b-y)+1
    data[(a,b)]= min(one,two,three)
    return min(one,two,three)

print(dfs(a,b))
样例:
5 2 3 1
3


第二题

给一个字符串,里面都是小写字母,如果一个字母可以被标记(标记条件为隔壁字母和它相邻,相邻的意思就是b和a是相邻的,b和c是相邻的),那么就可以标记它和它隔壁的字母,获取它和隔壁的分数(a为1分,b为2分,以此类推),一个字母只能被标记一次。求最高分数。

输入:abb

输出:4

只A了一半,在评论区蹲大佬解答
def fen(a,b):
    if a==b:
        return (ord(a)-ord("a")+1)*2
    elif  abs(ord(a)-ord(b))==1:
        return ord(a)-ord("a")+2+ord(b)-ord("a")
    else:
        return 0

def solve():
    # print(fen("y","z"))
    s = input()
    n = len(s)
    if n<2:
        print("0")
        return 
    data = [[0 for i in range(3)] for j in range(n+1)]
    ans = 0
    for i in range(2,n+1):
        j = i-1
        if s[j]==s[j-1]:
            jia = fen(s[j],s[j-1])
            data[i][0] = max(data[i-2][0],data[i-2][1],data[i-2][2])+jia 
        elif abs(ord(s[j])-ord(s[j-1]))==1:
            jia = fen(s[j],s[j-1])
            data[i][1] = max(data[i-2][0],data[i-2][1],data[i-2][2])+jia 
        else:
            # 无法标注
            data[i][2] = max(data[i-1][0],data[i-1][1],data[i-1][2],data[i-2][0],data[i-2][1],data[i-2][2])
        ans = max(ans,data[i][0],data[i][1],data[i][2])
    print(ans)
    

solve()

每一个位置分3中情况:相同、或者相邻、或者无法标注




第三题

生成一个二叉树,输出其层序遍历,要求:

  • 一共n个节点,包含1~n。

  • 除了根节点,每个节点和其父节点的乘积为偶数。

输入:4

输出:2 4 1 3

答案不唯一,输出一种即可

因为是完全二叉树,考虑数组存储,则数组下标1~n顺序输出就是层次遍历
能过90%+的样例,显示超时
n = int(input())
tree = [0]*(n+1)
flag = [False]*(n+1)

def pan(cur,i):
    if cur==1:
        return True 
    
    fu = cur//2
    while fu>0:
        val = i*tree[fu]
        if val %2==1:
            return False 
        fu = fu//2
    
    return True


def dfs(cur):
    if cur>n:
        ans = ""
        for i in range(1,n+1):
            ans +=str(tree[i])+" "
        print(ans)

        return True 
    for i in range(1,n+1):
        if flag[i]:
            continue
        if pan(cur,i)==False:
            continue
        tree[cur] = i 
        flag[i] = True 
        if dfs(cur+1):
            return 
        flag[i] = False
        tree[cur] = 0 
    return False 



dfs(1)




第四题

在沼泽地中移动,1代表沼泽,0代表平地。

在相同的地方里移动消耗1,否则消耗2。

求从0,0处到n-1,m-1处最少消耗多少。

输入:3 3

1 0 0

1 1 1

0 0 1

输出:4


只考虑向右向下的情况可以过90%+的样例

# 444444
n,m  = map(int,input().split(" "))
data = []
for i in range(n):
    data.append(list(map(int,input().split(" "))))
# print(data)
val = [[0 for j in range(m) ] for i in range(n)]

for i in range(1,n):
    tmp = abs(data[i][0]-data[i-1][0])
    if tmp==0:
        val[i][0] = val[i-1][0]+1
    elif tmp==1:
        val[i][0] = val[i-1][0]+2

for j in range(1,m):
    tmp = abs(data[0][j]-data[0][j-1])
    if tmp==0:
        val[0][j] = val[0][j-1]+1
    elif tmp==1:
        val[0][j] = val[0][j-1]+2

for i in range(1,n):
    for j in range(1,m):
        # 向右
        you =abs( data[i][j-1]- data[i][j])+1

        # 向下
        xia = abs(data[i-1][j]-data[i][j])+1
        # # 向左
        # zuo = float("inf")
        # if j+1<m:
        #     zuo = abs(data[i][j]-data[i][j+1])
        #     zuo+=val[i][j+1]
        
        val[i][j] = min(val[i][j-1]+you,  val[i-1][j]+xia)

print(val[n-1][m-1])










#投票##实习##笔试题目##网易#
全部评论
引擎跟算法后端的题是不是不一样,做的我心累😪 而且那个系统测试用例是要么AC要么0分
点赞 回复 分享
发布于 2022-03-27 22:04
第三题是初始化一个res,如果是偶数直接添加在res后,如果是奇数,交换该结点的兄弟和父亲节点,根据树的索引二倍+1的关系
点赞 回复 分享
发布于 2022-03-27 20:01
第四题用的dijkstra,结果也只过了90多,菜死我了😥
点赞 回复 分享
发布于 2022-03-27 19:46
第二题经典dp,第三题就是脑筋急转弯,只需要保证叶子节点都放置奇数就可以了,而叶子节点就是最后(n+1)/2个节点,所以只需要顺序输出1-n内的偶数,再输出1-n内的奇数就可以了
点赞 回复 分享
发布于 2022-03-27 19:09
根据完全二叉树特性,第三题可以直接先输出偶数,后输出奇数。直接就a了
点赞 回复 分享
发布于 2022-03-27 19:03
全a了,三个dp,树那题思维题
点赞 回复 分享
发布于 2022-03-27 18:50
我也是只考虑向右和向下也是过了90多,但是有人这样就就能ac,我看代码也没啥区别啊就是个二维dp,不知道咋回事
点赞 回复 分享
发布于 2022-03-27 18:14
第四题实测只考虑向右向下可以AC
点赞 回复 分享
发布于 2022-03-27 18:05

相关推荐

1.&nbsp;自我介绍2.&nbsp;项目都是自己写的吗?3.&nbsp;我看你用&nbsp;koa2&nbsp;写后端,为什么选择它,能讲讲吗?4.&nbsp;那你提到&nbsp;koa2&nbsp;它是不提供中间件的,你是怎么解决的?5.&nbsp;中间件的原理是什么?(洋葱模型)6.&nbsp;你刚刚说碰到&nbsp;next()&nbsp;就进入下一个中间件,那&nbsp;next&nbsp;只能执行同步,如果是异步的话,你是怎么处理的?(async/await,但是我发现,有的中间件需要在异步中间件之前执行,所以我用&nbsp;try/catch&nbsp;来处理异步中间件的异常)7.&nbsp;JS&nbsp;异步发展史,以及它们的优缺点说一下&nbsp;(回调函数--Promise--Generator--async/await)8.&nbsp;你刚刚说&nbsp;Promise&nbsp;状态不能更改,那如果我要设计一个能修改&nbsp;Promise&nbsp;状态的函数,你会怎么设计?9.&nbsp;CSS&nbsp;水平垂直居中的方法(flex、grid、绝对定位&nbsp;+&nbsp;margin:auto、绝对定位&nbsp;+&nbsp;负&nbsp;margin、绝对定位&nbsp;+&nbsp;transform、table-cell)10.&nbsp;你刚刚说到&nbsp;flex&nbsp;布局,那&nbsp;flex:1&nbsp;是什么意思?(flex:&nbsp;flex-grow&nbsp;&nbsp;flex-shrink&nbsp;&nbsp;flex-basis;等价&nbsp;flex:1&nbsp;1&nbsp;0%表示元素可以均分剩余空间,可拉伸、可压缩,不依赖内容宽度,自动自适应填充布局。)11.&nbsp;父容器宽是&nbsp;500px,然后它左右各有两个子容器是&nbsp;100px,如果设置&nbsp;flex:&nbsp;1,那它的宽度是多少?(500-100-100=300px)12.&nbsp;说说你对浏览器缓存的理解(强缓存、协商缓存)13.&nbsp;如果一个用户,他怎么去刷新都无法刷到最新版的代码,你能说下可能的原因吗?(版本号、hash等)还有吗?(我说我不知道了,面试官说还有&nbsp;CDN&nbsp;没有同步,我说企业才会这么干,自己写项目一般不会,我知道&nbsp;cdn&nbsp;是用来解决高并发的手段)14.&nbsp;React你熟吗?说下&nbsp;React&nbsp;函数组件和类组件的区别15.&nbsp;怎么避免&nbsp;Hooks&nbsp;导致组件重新渲染?(使用&nbsp;useCallback、useMemo、React.memo、useRef等等)16.&nbsp;谈一下我对&nbsp;React&nbsp;的状态管理的理解(Redux、Mobx、Zustand,我说&nbsp;Zustand&nbsp;用的最多)17.&nbsp;React&nbsp;常见的&nbsp;hooks&nbsp;有哪些?(useState、useEffect、useRef、useCallback、useMemo、useReducer、useContext、useImperativeHandle、useLayoutEffect、useDebugValue)18.&nbsp;TS&nbsp;你熟吗?我们引进&nbsp;TS&nbsp;的目的是为什么?19.&nbsp;interface&nbsp;和&nbsp;type&nbsp;的区别20.&nbsp;说下&nbsp;TS&nbsp;里的泛型21.&nbsp;我现在有十个字段,比如十个字段就要&nbsp;A&nbsp;B&nbsp;C&nbsp;D&nbsp;E&nbsp;F&nbsp;G&nbsp;这种。那我现在另有另外一个方法,这个方法接受的参数呢,必须是这个&nbsp;interface&nbsp;A&nbsp;里面的这个&nbsp;K。就比如说你可以是&nbsp;A&nbsp;B&nbsp;C&nbsp;可以&nbsp;A&nbsp;B&nbsp;C&nbsp;D&nbsp;任何组合都可以,但是必须是这个&nbsp;interface&nbsp;里面的&nbsp;A&nbsp;里面的定义的。这个&nbsp;K&nbsp;这种类型的话是怎么去定义呢?(说实话我有点不太理解啥意思,反正我说了&nbsp;keyof)```&nbsp;TypeScriptinterface&nbsp;Obj&nbsp;{A:&nbsp;stringB:&nbsp;stringC:&nbsp;stringD:&nbsp;stringE:&nbsp;string//&nbsp;其他字段...}```22.&nbsp;vite&nbsp;用过吗?说说和&nbsp;webpack&nbsp;的区别。vite&nbsp;的优缺点是什么23.&nbsp;说说&nbsp;Tree&nbsp;shaking(树摇)&nbsp;和&nbsp;Code&nbsp;Splitting&nbsp;(代码分割)的区别24.&nbsp;Git&nbsp;你熟吗?说说&nbsp;git&nbsp;merge&nbsp;和&nbsp;git&nbsp;rebase&nbsp;的区别,什么时候用&nbsp;git&nbsp;merge,什么时候用&nbsp;git&nbsp;rebase?25.&nbsp;web3&nbsp;你熟吗?(不太熟,听说过而已)26.&nbsp;我看你自我介绍说了&nbsp;AI,你是怎么用的?27.&nbsp;除了提示词,还有什么能让&nbsp;AI&nbsp;更聪明?28.&nbsp;AI&nbsp;的优缺点你说一下29.&nbsp;AI&nbsp;发展这么快,你觉得我们以后会扮演什么角色?30.&nbsp;反问基本都答上来了。面了我80分钟,我还以为稳过的
查看29道真题和解析
点赞 评论 收藏
分享
评论
3
9
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务