Максимальная подпоследовательность продукт пробега ненулевых чисел является либо произведением всех чисел (если есть четное число отрицательных чисел), или это большее произведение всех чисел после первого отрицательного числа и произведение всех чисел до последнего отрицательного числа.
Это дает вам решение O (N): разбить последовательность на пробеги ненулевых чисел и применить правило в первом абзаце к каждому. Выберите максимальное значение.
C-подобный код Python для этого:
def prod(seq, a, b):
r = 1
for i in xrange(a, b):
r *= seq[i]
return r
def maxprodnon0(seq, a, b):
firstneg = -1
negs = 0
for i in xrange(a, b):
if seq[i] >= 0: continue
negs += 1
if firstneg < 0:
firstneg = i
lastneg = i
if negs % 2 == 0: return prod(seq, a, b)
return max(prod(seq, firstneg + 1, b), prod(seq, a, lastneg))
def maxprod(seq):
best = 0
N = len(seq)
i = 0
while i < N:
while i < N and seq[i] == 0:
i += 1
j = i
while j < N and seq[j] != 0:
j += 1
best = max(best, maxprodnon0(seq, i, j))
i = j
return best
for case in [2,5,-1,-2,-4], [1,2,0,-4,5,6,0,7,1], [1,2,0,-4,5,6,-1,-1,0,7,1]:
print maxprod(case)
Поскольку вы не хотите код, это может быть лучше [Math.SE] (http://math.stackexchange.com/). – mwerschy
https://en.wikipedia.org/wiki/Sorting_algorithm O (n) идеалистичен для средней производительности ... – Maresh
Я не понимаю этот форум, если iask код, тогда кто-то говорит мне, что это неправильно и говорит мне, чтобы я сделал это я сам. , если я досулю спросить код, это тоже неправильно. – Shermano