首页 > 阿里巴巴笔试问题错了吗?!
头像
牛客153431025号
发布于 2021-09-01 12:49
+ 关注

阿里巴巴笔试问题错了吗?!

阿里笔试中有这么一道题:
给定有长度为n的一个数组,比如 [3,5,8],后项减去前一项做差分,最后一项直接删去;一直这样做差分,直到序列中只剩下一项,返回这一项对10**9+7取模的大小。
eg
输入>>> 
3
1 2 3
输出>>>
0
采用暴力法,无法全部通过。
通过数学观察,我发现最后的结果和数组中每一个元素都有关系,而且这些元素的系数恰好是杨辉三角形中第n行的系数,于是我编写了代码,自测+测试案例是正确的,提交后,通过率为0%,请教各位大佬,错在哪里了?
是思路错了,还是编程细节出错了?谢谢大佬们指点。

import sys
n = int(input())
#n是数组的长度
data = list(map(int,input().split()))
#data中读取输入的数组
if n==1:
    print(data[0])
elif n==2:
    print(data[1]-data[0])
co = [1]
# co中是杨辉三角形,第n行的系数
n = n-1
for i in range(n):
    temp = co[i]*(n-i)/(i+1)
    co.append(temp)
res = 0
if n%2==1:
    flag = -1
else:
    flag = 1
for i in range(len(data)):
    res += data[i]*flag*co[i]
    flag = -flag
res = int(res%(10**9+7))
print(res)
PS:这里面对于n==1和n==2的处理确实有瑕疵,会输出两次,那么主体的思路有无其他问题?


全部评论

(2) 回帖
加载中...
话题 回帖