不同集合长度的子集查找器

huangapple go评论48阅读模式
英文:

Subset finder for different set lengths

问题

问题:您需要编写一个算法,找到给定整数数组中的子数组数量,其总和等于目标数字。编写一个函数来计算总和等于目标数字的子数组的数量。

示例:
输入:
数组:[1, 2, 3, 4, 5, 6]
目标总和:8

输出:
子数组的数量:4([6, 2],[5, 3],[5, 2, 1],[4, 3, 1])

注意:您可以使用任何编程语言来解决这个问题。
注意:该函数应适用于不同的集合长度。

英文:

Question: You need to write an algorithm that finds the number of subarrays in a given integer array whose sum is equal to a target number. Write a function that calculates the count of subarrays whose sum equals the target number.

Example:
Input:
Array: [1, 2, 3, 4, 5,6]
Target Sum: 8

Output:
Count of Subarrays:4 ([6,2],[5,3],[5,2,1],[4,3,1])

note: you can solve it in any programming language you want
note: the function should be suitable for different set lengths

答案1

得分: 0

动态规划方法:

创建大小为 Sum+1 的数组/列表 A[]

将其填充为零,除了 A[0]=1(表示制作空子集的一种方式)。

对于数组中的每个值 V:
    对于从 Sum 到 V 的每个索引 i:
        A[i] += A[i-V]
打印 A[Sum]

发生了什么:

数组 A[] 存储了所有可能和的子集数量(您可以在外部循环的每轮之后检查其内容)。

我们可以使用项目 V 和总和为 i-V 的任何子集来生成总和 i

反向扫描 - 以避免对相同项目进行重复计数。

英文:

Dynamic programming approach:

Make array/list A[] of size Sum+1

Fill it with zeros, except for A[0]=1 (there is one way to make empty subset)

for every value V from array:
    for every index i from Sum downto V:
         A[i] += A[i-V]
print A[Sum]

What's happen:

Array A[] holds number of subsets for all possible sums (you can inspect it's contents after every round of outer loop).

We can make sum i using item V and any subsets with sum i-V.

Reverse scan - to avoid double counting of the same item.

huangapple
  • 本文由 发表于 2023年6月26日 18:20:03
  • 转载请务必保留本文链接:https://go.coder-hub.com/76555756.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定