Il prodotto massima sottosequenza di una serie di numeri diversi da zero o è il prodotto di tutti i numeri (se c'è un numero pari di numeri negativi), oppure è il maggiore del prodotto di tutti i numeri dopo il primo numero negativo e il prodotto di tutti i numeri fino all'ultimo numero negativo.
Questo fornisce una soluzione O (N): interrompe la sequenza in serie di numeri diversi da zero e applica la regola nel primo paragrafo a ciascuna. Scegli il massimo di questi.
codice Python C-like per questo:
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)
Dal momento che non si desidera che il codice questo potrebbe essere migliore per [Math.SE] (http://math.stackexchange.com/). – mwerschy
https://en.wikipedia.org/wiki/Sorting_algorithm O (n) è idealista per prestazioni medie ... – Maresh
non capisco questo forum, se iask il codice allora qualcuno mi dice che è sbagliato e mi dice di fare me stesso. se devo chiedere il codice, è anche sbagliato. – Shermano