美团笔试题求解

第一道题:算数

给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 四川

相关推荐

02-23 12:32
已编辑
门头沟学院 嵌入式工程师
King987:学历没有问题,然后既然有实习经历的话,把这个放在上面多写一点,哪怕你自己包装一下,只要能圆回来就行,既然有实习经历的话,肯定主要看实习经历之类的。然后也会主要问这里多准备准备
点赞 评论 收藏
分享
评论
9
22
分享

创作者周榜

更多
牛客网
牛客企业服务