题目:
给你一个长度为 n
的 正 整数数组 nums
。
如果两个 非负 整数数组 (arr1, arr2)
满足以下条件,我们称它们是 单调 数组对:
- 两个数组的长度都是
n
。 arr1
是单调 非递减 的,换句话说arr1[0] <= arr1[1] <= ... <= arr1[n - 1]
。arr2
是单调 非递增 的,换句话说arr2[0] >= arr2[1] >= ... >= arr2[n - 1]
。- 对于所有的
0 <= i <= n - 1
都有arr1[i] + arr2[i] == nums[i]
。
请你返回所有 单调 数组对的数目。
由于答案可能很大,请你将它对 109 + 7
取余 后返回。
class Solution: def countOfPairs(self, nums: List[int]) -> int: MOD = 1000000007 n = len(nums) # 定义dfs(i,j)表示arr1[i]=j时填充前i-1个位置的数组对总数 @cache def dfs(i, j): # 边界情况 if i == 0: return 1 res = 0 # 当前nums[i-1]=k的最大范围 max_k = min(nums[i - 1], min(j, nums[i - 1] - nums[i] + j)) for k in range(max_k + 1): res += dfs(i - 1, k) res %= MOD return res Sum = 0 # 枚举nums[n-1]所有可能填充的值 for j in range(nums[n - 1] + 1): Sum += dfs(n - 1, j) Sum %= MOD return Sum
标签:数组,nums,3250,Sum,arr2,arr1,单调 From: https://www.cnblogs.com/xxlm/p/18575428