Das maximale Subsequenz Produkt einer Serie von Zahlen ungleich Null ist, entweder das Produkt aller Zahlen (wenn eine gerade Anzahl von negativen Zahlen es gibt), oder es ist die größer als das Produkt aller Zahlen nach der ersten negativen Zahl und das Produkt aller Zahlen bis zur letzten negativen Zahl.
Dies gibt Ihnen eine O (N) -Lösung: Brechen Sie die Sequenz in Läufe von Nicht-Null-Zahlen und wenden Sie die Regel im ersten Absatz auf jeden an. Wählen Sie die Max von diesen.
C-wie Python-Code für diese:
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)
Da Sie dies nicht wollen Code vielleicht besser für [Math.SE] (http://math.stackexchange.com/). – mwerschy
https://en.wikipedia.org/wiki/Sorting_algorithm O (n) ist ideal für durchschnittliche Leistung ... – Maresh
ich verstehe dieses Forum nicht, wenn iask der Code dann sagt jemand mir, dass es falsch ist und sagt mir zu tun es selbst. Wenn ich den Code frage, ist es auch falsch. – Shermano