Foo Bar - тестовый набор Power Hungry не пройден - PullRequest
1 голос
/ 18 февраля 2020

Задача состоит в том, чтобы найти максимальное произведение подмножества данного массива. Вот проблема:

Напишите решение функции (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.

Вот ответ с моим кодом , открытые тесты и некоторые тестовые случаи, которые я добавил.

Очевидно, что есть крайний случай, когда мой код терпит неудачу, но я не могу понять вообще. Помогите, пожалуйста?

...