गैर शून्य संख्या का एक रन की अधिकतम परिणाम को उत्पाद या तो सभी नंबरों का उत्पाद है (वहाँ नकारात्मक संख्या सम संख्या है), या यह है पर पहले ऋणात्मक संख्या के बाद सभी संख्याओं के उत्पाद से अधिक, और अंतिम संख्या तक सभी संख्याओं का उत्पाद।
यह आपको एक ओ (एन) समाधान देता है: अनुक्रम को गैर-शून्य संख्याओं के रनों में तोड़ें और नियम को प्रत्येक के पहले पैराग्राफ में लागू करें। इनमें से अधिकतम उठाओ।
सी की तरह इस के लिए अजगर कोड:
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