📅  最后修改于: 2023-12-03 14:54:15.193000             🧑  作者: Mango
算术级数(AP)是一种常见的数学模型,它的每一项等于前一项加上一个固定差值。在程序中,我们需要统计一个数组中有多少个子数组能够形成一个算术级数。
假设 dp[i][j]
表示以元素 i
结尾、公差为 j
的子数组数量。则有递推公式:
dp[i][j] = dp[i-1][j] + 1 # nums[i] - nums[i-1] = j
其中,初始值是 dp[0][j] = 0
(表示以元素0结尾、公差为j的子数组数量为0),最后答案是所有 dp[i][j]
的和。
具体实现可以使用一个哈希表存储每个公差的数量,以减少空间复杂度。
Python 代码如下:
from typing import List
def numberOfArithmeticSlices(nums: List[int]) -> int:
n = len(nums)
ans = 0
dp = [{} for _ in range(n)]
for i in range(n):
for j in range(i):
d = nums[i] - nums[j]
cnt = dp[j].get(d, 0)
dp[i][d] = dp[i].get(d, 0) + cnt + 1
ans += cnt
return ans
时间复杂度是 $O(n^2)$,空间复杂度是 $O(n^2)$。