Các sản phẩm dãy tối đa của một chạy các số khác không hoặc là sản phẩm của tất cả các số (nếu có một số chẵn các số âm), hoặc đó là lớn hơn của sản phẩm của tất cả các con số sau số âm đầu tiên và sản phẩm của tất cả các số lên đến số âm cuối cùng.
Điều này cung cấp cho bạn một giải pháp O (N): ngắt chuỗi thành các số không khác và áp dụng quy tắc trong đoạn đầu tiên cho mỗi phần. Chọn tối đa các giá trị này.
C-như mã Python cho việc này:
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)
Vì bạn không muốn mã này có thể là tốt hơn cho [Math.SE] (http://math.stackexchange.com/). – mwerschy
https://en.wikipedia.org/wiki/Sorting_algorithm O (n) là lý tưởng cho hiệu suất trung bình ... – Maresh
Tôi không hiểu diễn đàn này, nếu iask mã sau đó ai đó nói với tôi rằng nó sai và nói tôi phải làm Bản thân mình. nếu tôi hỏi mã, nó cũng sai. – Shermano