Hard

Choose Numbers From Two Arrays in RangePython

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