Arithmetic Slices
题意
给一个数组A,求A的子序列中等差数列的个数(等差数列的要求是至少连续三个数字,相邻之间的差相等)
解法
查了下用O(n)时间效率的做法,发现好精妙啊。学习了。
比如有这么几个数组,以及它们的子序列等差数列个数:
[1,2,3] 1
[1,2,3,4] 3
[1,2,3,4,5] 6
[1,2,3,4,5,6] 10
通过观察发现,个数是有规律的,分别是1,3=1+2,6=3+3,10=6+4,即整体为等差数列的个数加一,则它包含的子序列的等差数列个数之差是一个差值为1的等差数列,从2开始,如果用公式表示,就是 F(n) = F(n-1) + add,add就是一个从2开始的等差数列。
代码
|
|