Найти подмножество массива с максимальным произведением - PullRequest
0 голосов
/ 05 февраля 2020

Я получил вопрос интервью, чтобы найти непустое подмножество массива с максимальным произведением. Я решил задачу, но один тест из пяти не проходит. Я не понимаю, что я мог упустить в своем решении. (Задача должна быть выполнена в python 2.7)

Задача здесь:

У меня есть массив целых чисел, и мне нужно вернуть непустое подмножество элементов с максимальным произведением ценностей. Если у меня есть нечетное количество отрицательных чисел в массиве, я должен исключить одно из них, чтобы выбранный продукт был положительным.

Если у меня внутри 0, в общем, я тоже хочу его исключить. Например: для [2, 5, -2] результат должен быть 10, для [-2, -5, -1, 0, 2] результат должен быть 20.

Я пробовал разные крайние случаи, например [ -1], [1], [0], [0,0,0]

Решение здесь:

from functools import reduce

def answer(arr):
    selection = [n for n in arr if n !=0 and -1000<=n<=1000]
    negative = [n for n in selection if n<0]
    if len(negative) % 2 == 1:
        selection.remove(max(negative))
    if not selection:
        return '0'
    else:
        return str(reduce(lambda x, y: x * y, selection))

1 Ответ

2 голосов
/ 05 февраля 2020

Внимательное прочтение вопроса указывает на то, что answer([-5]) должно дать решение -5, так как ему нужно выбрать непустое подмножество входного массива. Однако ваш код возвращает 0 для answer([-5]). Так что, возможно, что-то вроде:

from functools import reduce

def answer(arr):
    hasZero = any([n == 0 for n in arr])
    selection = [n for n in arr if n !=0 and -1000<=n<=1000]
    negative = [n for n in selection if n<0]
    if len(negative) % 2 == 1 and (len(selection) > 1 or hasZero):
        selection.remove(max(negative))
    if not selection:
        return '0'
    else:
        return str(reduce(lambda x, y: x * y, selection))

answer([-5])
# '-5'
answer([0, -5])
# '0'
...