携程9.9算法岗笔试AK代码

感谢携程三道medium,在动辄hard,acm题的笔试里面简直一股清流
第一题最大方阵和:
思路:二维前缀和
x = input().split()
x = list(map(int,x))
n,m,k = x[0],x[1],x[2]
matrix = []
for _ in range(n):
    x = input().split()
    x = list(map(int,x))
    matrix.append(x)
res = 0 
prefix = [[0] * (m+1) for _ in range(n+1)]
for i in range(1,n+1):
    for j in range(1,m+1):
        prefix[i][j] = prefix[i-1][j] + prefix[i][j-1] - prefix[i-1][j-1] + matrix[i-1][j-1]
res = 0
for i in range(k,n+1):
    for j in range(k,m+1):
        res = max(res,prefix[i][j] - prefix[i][j-k] - prefix[i-k][j] + prefix[i-k][j-k])
print(res)


第二题,模拟四种状态
思路:直接模拟即可
import heapq
n = int(input())

stack = []
num = 0
def put(x,y):
    heapq.heappush(stack,[y,x])
    global num
    num += x
def get(x):
    global num
    if x > num:return 'no'
    num -= x
    while stack and stack[0][1] <= x:
        x -= heapq.heappop(stack)[1]
    if x:
        stack[0][1] -= x 
    return 'yes'
def nextday():
    global num 
    while stack and stack[0][0] == 1:
        num -= heapq.heappop(stack)[1]
         
    for i in range(len(stack)):
        stack[i][0] -= 1
def getnearst():
    if not stack:return 0
    return stack[0][0]

for i in range(n):
    x = input().split()
    x = list(map(int,x))
    if x[0] == 1:
        put(x[1],x[2])
    elif x[0] == 2:
        print(get(x[1]))
    elif x[0] == 3:
        nextday()
    elif x[0] == 4:
        print(getnearst())

第三题,黑白树
思路:带备忘录的dfs
class Node:
    def __init__(self,color):
        self.child = []
        self.color = color

x = input().split()
x = list(map(int,x))
n,root = x[0],x[1]
cache = {}
 
color = input().split()
color = list(map(int,color))
for i in range(len(color)):
    cache[i+1] = Node(color[i])
while True:
    try:
        x = input().split()
        x = list(map(int,x))
        cache[x[0]].child.append(x[1])
    except:
        break
memo = [0] * (n+1)
def dfs(i):
    if memo[i]!=0:
        return memo[i]
    res = 0 
    for node in cache[i].child:
        if cache[node].color != cache[i].color:
            res += 1
        res += dfs(node)
    memo[i] = res
    return res
dfs(root)
for i in range(1,n+1):
    print(memo[i])




#携程笔试##携程##笔经#
全部评论
请问,还有单项选择题吗,算法岗,是哪方面的?DL&nbs***bsp;ML
点赞 回复 分享
发布于 2021-11-08 12:02
老哥后续如何了,面试?
点赞 回复 分享
发布于 2021-11-08 09:17
看起来第二题写的都差不多为什么我只通过了27%。。离了个大谱
点赞 回复 分享
发布于 2021-09-11 00:11
这算是mid题嘛  哎
点赞 回复 分享
发布于 2021-09-10 10:02
类似这样
点赞 回复 分享
发布于 2021-09-10 09:47
第三题几乎一样啊,只不过我是用了邻接矩阵来表示节点之间的关系,也有备忘录,就过了9%,emmm
点赞 回复 分享
发布于 2021-09-10 09:38
大佬,这个题的第一个用例的输出是啥来
点赞 回复 分享
发布于 2021-09-10 01:25
第三题里面的root没有用吗?而且题目里面说1 2只是1和2相连,并没有说1是2的父节点。我是不是想复杂了😓
点赞 回复 分享
发布于 2021-09-09 21:39
您好,请问我这样切片做只通过18%可能是什么原因呢?
点赞 回复 分享
发布于 2021-09-09 21:21
第一题直接暴力也过了。。。
点赞 回复 分享
发布于 2021-09-09 21:17

相关推荐

不愿透露姓名的神秘牛友
07-04 18:02
好不容易拿到了字节Offer,鼠鼠做后端的,但家里人觉得可能被裁员不稳定,让鼠鼠去投国企,现在好纠结到底该咋选
文档传偷助手:该投就投吧,不过建议别放弃offer 拿到手里的才是最好的
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
评论
9
12
分享

创作者周榜

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