携程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])




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

相关推荐

头像
03-13 13:45
Java
职位描述:【转正实习】算法工程师-搜索推荐关于我们支付宝技术部&nbsp;-&nbsp;用户技术部&nbsp;-&nbsp;创新孵化中心(成都)支付宝,作为全球领先的数字支付平台之一,我们的用户技术部不仅肩负着为亿万用户提供卓越服务的使命,同时也是创新的前沿阵地。位于成都的创新孵化中心,是我们推出游戏中心、阅读中心等创新业务的摇篮。加入我们,你将有机会:创新引领:参与内部创业,AI助力业务增长,打造千万级用户喜爱的产品,感受前所未有的成就感。技术先锋:参与并负责支付宝创新产品内容的各类算法,包括个性化推荐系统、内容生态构建、内容理解、用户理解等核心算法能力;我们在寻找怀揣热情、渴望成长的你——&nbsp;一起书写技术创新的新篇章!岗位和要求计算机、统计等相关专业本科及以上学历;熟练掌握Java/C++/Python中至少一门语言,熟悉tensorflow或者pytorch至少一种机器学习常用框架;有相关推荐系统、机器学习、计算机视觉、数据挖掘等相关领域研究及实践经验。可以加分的:有顶级会议论文发表(发布顶刊顶会至少一篇,担当一作/并列/二作);作为重要角色参与领域内有含金量的比赛并取得成绩(比如ACM)。选择我们的优势:地理位置:成都作为你的工作地点,承诺舒适的生活环境、良好的工作氛围以及美食的天堂。全面发展:我们更注重你的全面能力,如表达、沟通和思维,而非仅仅是编程。应聘资格:面向2024年11月1日至2025年10月31日期间毕业的海内外院校的2025届毕业生。欢迎发送简历至邮箱:zonglin.yp@antgroup.com#春招##实习##算法##校招#
点赞 评论 收藏
转发
9 12 评论
分享
牛客网
牛客企业服务