假设我们有一个称为nums的数字列表,我们必须找到长度≥3的算术子序列数。正如我们所知,算术序列是一个数字列表,其中一个数字与下一个数字之差相同。
因此,如果输入像nums = [6、12、13、8、10、14],那么输出将是3,因为我们有以下子序列:[6、8、10],[6、10、14 ],[12、13、14]。
为了解决这个问题,我们将按照以下步骤操作:
dp:=新映射
n:= nums的大小
res:= 0
对于0到n范围内的i,执行
diff:= nums [i]-nums [j]
prev:= dp [(i,diff)]如果不存在,则为0
prevprev:= dp [(j,diff)]如果不存在,则为0
dp [i,diff]:=上一页+ prevprev + 1
res:= res + prevprev
对于范围在0到i之间的j,执行
返回资源
class Solution: def solve(self, nums): dp = {} n = len(nums) res = 0 for i in range(n): for j in range(i): diff = nums[i] - nums[j] prev = dp.get((i, diff), 0) prevprev = dp.get((j, diff), 0) dp[(i, diff)] = prev + prevprev + 1 res += prevprev return res ob = Solution()nums = [6, 12, 13, 8, 10, 14] print(ob.solve(nums))
[6, 12, 13, 8, 10, 14]
输出结果
3