Hard
Choose Numbers From Two Arrays in Range — Python
Full explanation · Time O(n^2 * v) · Space O(n * v)
# Time: O(n^2 * v), v is max(max(nums1), max(nums2))
# Space: O(n * v)
import collections
import itertools
# dp
class Solution(object):
def countSubranges(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: int
"""
MOD = 10**9+7
result = 0
dp = collections.Counter()
for x, y in itertools.izip(nums1, nums2):
new_dp = collections.Counter()
new_dp[x] += 1
new_dp[-y] += 1
for v, c in dp.iteritems():
new_dp[v+x] = (new_dp[v+x]+c)%MOD
new_dp[v-y] = (new_dp[v-y]+c)%MOD
dp = new_dp
result = (result+dp[0])%MOD
return result