MCPcopy Create free account
hub / github.com/TheAlgorithms/Go / IsSubsetSum

Function IsSubsetSum

dynamic/subsetsum.go:15–56  ·  view source on GitHub ↗
(array []int, sum int)

Source from the content-addressed store, hash-verified

13var ErrNegativeSum = fmt.Errorf("negative sum is not allowed")
14
15func IsSubsetSum(array []int, sum int) (bool, error) {
16 if sum < 0 {
17 //not allow negative sum
18 return false, ErrNegativeSum
19 }
20
21 //create subset matrix
22 arraySize := len(array)
23 subset := make([][]bool, arraySize+1)
24 for i := 0; i <= arraySize; i++ {
25 subset[i] = make([]bool, sum+1)
26 }
27
28 for i := 0; i <= arraySize; i++ {
29 //sum 0 is always true
30 subset[i][0] = true
31 }
32
33 for i := 1; i <= sum; i++ {
34 //empty set is false when sum is not 0
35 subset[0][i] = false
36 }
37
38 for i := 1; i <= arraySize; i++ {
39 for j := 1; j <= sum; j++ {
40 if array[i-1] > j {
41 subset[i][j] = subset[i-1][j]
42 }
43
44 if array[i-1] <= j {
45 if j-array[i-1] < 0 || j-array[i-1] > sum {
46 //out of bounds
47 return false, ErrInvalidPosition
48 }
49
50 subset[i][j] = subset[i-1][j] || subset[i-1][j-array[i-1]]
51 }
52 }
53 }
54
55 return subset[arraySize][sum], nil
56}

Callers 1

TestSubsetSumFunction · 0.85

Calls

no outgoing calls

Tested by 1

TestSubsetSumFunction · 0.68