程序查找在Python中形成目标总和的不同四元组数

假设我们有四个数字A,B,C和D的列表,并且还有一个目标值,我们必须找到不同的四元组(i,j,k,l)的数量,使得A [i] + B [ j] + C [k] + D [l]与目标相同。

因此,如果输入像A = [5,4,3] B = [8,4] C = [6,2] D = [4,10] target = 23,那么输出将是3,即四倍是[5,8,6,4] [3,4,6,10] [3,8,2,10]。

为了解决这个问题,我们将按照以下步骤操作:

  • 计数:= 0

  • m:=一个空的map

  • 对于A中的每个i,

    • 对于D中的每个z

    • count:= count + m [target-(k + z)]

    • 如果(目标-(k + z))以m为单位,则

    • m [i + j]:= m [i + j] +1

    • 对于B中的每个j

    • 对于C中的每个k,

    • 返回计数

    让我们看下面的实现以更好地理解:

    示例

    class Solution:
       def solve(self, A, B, C, D, target):
          count = 0
          from collections import defaultdict
          from collections import Counter
    
          m = defaultdict(int)
          for i in A:
             for j in B:
                m[i + j] += 1
    
          for k in C:
             for z in D:
                if target - (k + z) in m:
                   count += m[target - (k + z)]
          return count
    
    ob = Solution()A = [5, 4, 3]
    B = [8, 4]
    C = [6, 2]
    D = [4, 10]
    target = 23
    print(ob.solve(A, B, C, D, target))

    输入值

    [5, 4, 3], [8, 4], [6, 2], [4, 10], 23

    输出结果

    3
    猜你喜欢