Задача состоит в том, чтобы найти максимальное произведение подмножества данного массива. Вот проблема:
Напишите решение функции (xs), которое принимает список целых чисел, представляющих уровни выходной мощности каждой панели в массиве, и возвращает максимальное произведение некоторого непустого подмножества эти цифры. Так, например, если массив содержит панели с уровнями выходной мощности [2, -3, 1, 0, -5], то максимальный продукт будет найден, если взять подмножество: xs [0] = 2, xs [1 ] = -3, xs [4] = -5, что дает произведение 2 * (- 3) * (- 5) = 30. Таким образом, решение ([2, -3,1,0, -5]) будет " 30 ".
Каждый массив солнечных панелей содержит не менее 1 и не более 50 панелей, и каждая панель будет иметь уровень выходной мощности, абсолютное значение которого не превышает 1000 (некоторые панели работают так плохо, что они поглощают энергию, но вам известен трюк с волновым стабилизатором панелей, который позволяет комбинировать две панели с отрицательным выходом для получения положительного выхода, кратного их значениям мощности).
My Код в основном удаляет все 0 внутри списка, затем я перебираю все оставшиеся целые в массиве и помещаю каждое из них в соответствующий массив (положительные или отрицательные числа). Я сортирую массив с отрицательными числами, затем проверяю его длину; если это нечетно, тогда я удаляю последний элемент (который всегда будет ближайшим к 0, так как я отсортировал его). Наконец, я умножаю каждое число внутри этих двух массивов и возвращаю результат (нам нужно вернуть его в виде строки).
def solution(xs):
negatives = []
positives = []
product = 1
xs = filter(lambda a: a != 0, xs)
if not xs:
return '0'
for num in xs:
if num > 0:
positives.append(num)
elif num < 0:
negatives.append(num)
if not positives and len(negatives) == 1:
return '0'
negatives.sort()
if negatives:
if len(negatives) % 2 != 0:
negatives.pop()
for x in positives + negatives:
product *= x
return str(product)
Я уже искал inte rnet, почему мои логики c терпит неудачу в четвертом тестовом примере, я читал, что если в массиве только одно отрицательное число, вы должны вернуть 0, но я также прочитал, что вы должны вернуть отрицательное значение. Однако до написания части моего кода, которая проверяет эту возможность, пятый контрольный пример также не удался. Таким образом, в этом случае вам нужно вернуть 0.
Вот ответ с моим кодом , открытые тесты и некоторые тестовые случаи, которые я добавил.
Очевидно, что есть крайний случай, когда мой код терпит неудачу, но я не могу понять вообще. Помогите, пожалуйста?