动态规划之等差数列
413.等差数列(Medium)
题目描述:
给定一个数组,求这个数组中连续且等差的子数组一共有多少个。
A = [1, 2, 3, 4]
返回: 3, A 中有三个子等差数组: [1, 2, 3], [2, 3, 4] 以及自身 [1, 2, 3, 4]。
一句话描述:
局部最优解:从第三个元素开始,dp[i]为以当前元素i结尾的数组包含的所有等差数列个数;
初始条件:i = 2
状态方程:A[i] - A[i-1] == A[i-1] - A[i-2]
代码:
class Solution:
def numberOfArithmeticSlices(self, A: List[int]) -> int:
n = len(A)
if n < 3: return 0
'''初始化dp状态所有元素为0'''
dp = [0] * n
for i in range(2,n):
if A[i] - A[i-1] == A[i-1] - A[i-2]:
dp[i] = dp[i-1] + 1
return sum(dp)