美团笔试题求解

第一道题:算数

给n个数,原始情况下就是对这n个数进行加法计算。现在对该加法串进行m次操作,每次操作将其中一个加法换成加减乘除中的一种重新计算整组数的值,每次操作之间是相互独立互不影响的。

第一行输入整数n

接下来一行输入n个整数

接下来输入一个整数m

接下来输入2m个以空格分开的数字或者符号t1, o1, t2, o2 ... 其中t为数字,o为符号,表示第i次操作选取第ti个加号改变为oi。

输出一行m个数字分别表示每次操作的后的答案,四舍五入保留一位小数。

用例:

输入:

5

1 2 4 2 5

3

1 - 2 * 4 /

输出:

10.0 16.0 7.4

这题我的思路就是先计算两个数组,分别是前i项和和后i项和,这样用来直接在操作之后单独把受影响的相邻的两个数拿出来进行计算后,直接叠加上前后两个序列之和就行了,测试用例过了但是整体通过率只有百分之18,说是运行时错误也不知道是哪没处理好,求大佬看看

n = int(input())
num = list(map(int, input().split(' ')))
m = int(input())
op = input().split(' ')

s1 = [0] * n  #前i项和
s1[0] = num[0]
s2 = [0] * n  #后i项和
s2[-1] = num[-1]
res = []
for i in range(1, n):
    s1[i] = s1[i - 1] + num[i]
    s2[n - i - 1] = s2[n - i] + num[n - i - 1]

for i in range(m):
    index = int(op[i * 2])
    t = op[i * 2 + 1]
    temp = 0
    if index > 1:
        temp += s1[index - 2]
    if index < n - 1:
        temp += s2[index + 1]
	#受影响的两个数字单独拎出来计算就行了,前后直接叠加
    if t == '+':
        temp += num[index - 1] + num[index]
    elif t == '-':
        temp += num[index - 1] - num[index]
    elif t == '*':
        temp += num[index - 1] * num[index]
    else:
        temp += num[index - 1] / num[index]
    res.append('%.1f' % temp)

print(' '.join(res))

另外一道题目:收藏家

有n个收藏夹初始值都是0,每次操作如果输入0则把第xi个收藏夹的值改为yi,如果为1则输出第xi到第yi个收藏夹的总和。

输入:

第一行两个整数n和操作次数m

第二行m个整数代表操作输入op

第三行m个整数表示xi

第四行m个整数表示yi

输出:

对于每个op=1的情况输出一个答案

用例:

输入:

4 7

1 0 1 0 1 0 1

1 1 1 3 1 4 1

3 2 3 5 3 100 3

输出:

0 2 7 7

这题我没想到什么好办法,就直接按照题目意思暴力解决过了百分之82,超时了。求大佬给个好办法

#美团##美团笔试##春招##算法题#
全部评论
第一题18%浪费了一小时啊,就感觉很简单,但是debug不出来
4 回复 分享
发布于 2023-04-01 12:03 广东
为什么第一题我只能过45%的测试量啊
4 回复 分享
发布于 2023-04-01 11:56 四川
提交了6次,前四次18%超时,后面改了一下,还是18%,显示作答错误😂
2 回复 分享
发布于 2023-04-01 12:01 湖南
第一题我也是AC18%
2 回复 分享
发布于 2023-04-01 12:00 四川
为啥我暴力全过了?
2 回复 分享
发布于 2023-04-01 11:29 北京
请问下老哥怎么看整体通过率啊,我只能看到测试样本的通过率
2 回复 分享
发布于 2023-04-01 11:29 北京
第二题排序,就是结果了
1 回复 分享
发布于 2023-04-01 13:09 湖南
哥们 收藏夹为啥我暴力解 一直显示超时呀 你咋做的
1 回复 分享
发布于 2023-04-01 11:34 吉林
收藏夹我暴力直接百分百啊 语言cpp
1 回复 分享
发布于 2023-04-01 11:33 湖南
线段树就好了
1 回复 分享
发布于 2023-04-01 11:26 四川
cpp卡在cout保留小数上
点赞 回复 分享
发布于 2023-04-06 12:40 江苏
因为第一题 要保留一位小数 不是指截断至一位 而是两位四舍五入到一位
点赞 回复 分享
发布于 2023-04-02 15:30 陕西
第二题我用map记录了每次改变的下标和变化的值,每次查询的时候扫描map在查询范围就算上
点赞 回复 分享
发布于 2023-04-01 18:28 湖南
python的四舍五入有问题,.5应该入,但是python里是舍,要用decimal
点赞 回复 分享
发布于 2023-04-01 16:08 广东
这道题java和python都是18,换c++就全过
点赞 回复 分享
发布于 2023-04-01 15:24 江苏
lz,第一题你这个'%.1f'是保留一位小数,直接向下取整的,题目要求是四舍五入保留一位小数,python的round方法有问题,慎用;第二题单点更新+区间查询,裸树状数组,可以学习以下。
点赞 回复 分享
发布于 2023-04-01 13:57 陕西
今天第四题感觉就差一点就能过,没时间调试了妈的
点赞 回复 分享
发布于 2023-04-01 13:27 四川
收藏家我直接用cpp模拟 没优化就A了
点赞 回复 分享
发布于 2023-04-01 12:43 广西
第一题18,最后一题82,流程结束
点赞 回复 分享
发布于 2023-04-01 12:28 福建
'%.1f' % temp, 这里有问题应该,python中的四舍五入不是我们正常理解的四舍五入,round函数也是如此。比如round(1.25, 1)打印出来是1.2,而不是我们认为的1.3。解决办法之一:使用decimal函数来进行操作
点赞 回复 分享
发布于 2023-04-01 12:17 四川

相关推荐

点赞 评论 收藏
分享
06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
评论
9
22
分享

创作者周榜

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