Я не знаю, что сложность мое предложение было бы, но у меня есть идея :)
Что вы можете сделать, это попытаться уменьшить элемент из основного массива, которые не способны внести свой вклад в вам решение Предположим элементов являются -10, 5, 2, -2, 5,7 ,-5, 9,11,19
, так что вы можете увидеть, что -10,9,11 and 19
являются элементом
, которые никогда не пошли бы полезно сделать sum 0
в вашем случае
так попытайтесь удалить -10,9,11, and 19
из основного массива сделать это то, что вы можете сделать, это
1) create two sub array from your main array
`positive {5,7,2,9,11,19}` and `negative {-10,-2,-5}`
2) remove element from positive array which does not satisfy condition
condition -> value should be construct from negative arrays element
or sum of its elements
ie.
5 = -5 //so keep it //don't consider the sign
7 = (-5 + -2) // keep
2 = -2 // keep
9 // cannot be construct using -10,-2,-5
same for all 11 and 19
3) remove element form negative array which does not satisfy condition
condition -> value should be construct from positive arrays element
or sum of its elements
i.e. -10 // cannot be construct so discard
-2 = 2 // keep
-5 = 5 // keep
, так что, наконец, вы получили массив, содержащий -2, -5,5,7,2, создайте все возможные вспомогательные массивы и запишите сумму = 0
(Обратите внимание, если ваш входной массив содержит 0, добавьте все 0 в конечная матрица)
Я стараюсь с http://www.geeksforgeeks.org/find-subarray-with-given-sum/, но это не делает решить мой случай. –
В вашем первом примере {0} выглядит повторяющимся. а также может быть {0,1, -1,0} –
правильным и {0} считать двойное дублирование подмножества допустимыми –