美团笔试题求解
第一道题:算数
给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,超时了。求大佬给个好办法
#美团##美团笔试##春招##算法题#