这是我有的一个示例问题:
Madhav参加了Riya的生日聚会。他是一个极客,所以他不知道她想要哪种礼物。 因此,他随身携带了一个整数数组。数组遵循特定顺序。数组的第一个元素是1。 数组的第二个元素是6。 数组的其他元素比其前后数的平均值小两个。 很明显,Riya觉得这个想法很愚蠢,因此她想惩罚Madhav。 她决定问Madhav数组的第n个数字。如果他说错了答案,她会打他一巴掌。 帮助Madhav摆脱这种尴尬局面。
输入:第一行包含T,测试用例的数量,而第二行T包含N,即要找到的上述数组的第N个元素。
输出:
对于每个测试用例,输出一个整数,该整数是数组的第N个数字。由于答案可能非常大,因此以109 + 7模为输出
约束:
1≤T≤105 1≤N≤1018
样品输入
2
1
3
样品输出
1
15
说明 第一个测试用例对于[1] = 1来说是微不足道的。在第二个测试用例中,a [2] =(a [1] + a [3])/ 2-2。替换[1]和a [2]的值,我们得到:6 =(1 + a [2])/ 2-2。因此,a [2] = 8 * 2-1 = 15
上述问题需要在恒定的时间和空间内解决。如何从前两个固定数(此处为1,6)中找到建立解决方案所需的n个线性方程式?
答案 0 :(得分:1)
等式对应于
df['hour'] = df.time.dt.hour
df.groupby(by=["hour"]).your_column.mean()
这可以改写为
a[n] = (a[n-1] + a[n+1])/2 - 2
表达a[n+1] = 2(a[n]+2) - a[n-1]
并计算a[n] = a[n-1] + b[n]
的第一个值:
b[n]
很容易看到b[1] = 1; b[2] = 5; b[3] = 9; b[4] = 13; b[5] = 17; etc.
可以通过归纳法检查该通式。然后,随之而来
b[n] = 4(n-1) + 1
然后
a[n] = a[n-1] + 4(n-1) + 1
最后,使用
a[n] = 4(n-1) + 1
+ 4(n-2) + 1
+ 4(n-3) + 1
+ ...
+ 1
我们可以得出结论
sum_(i=0)^(n-1) (i) = n(n-1)/2
编程时,请注意溢出!