我最近嘗試了3個元素的最高產品的問題。現在我正在努力爲k元素做到這一點。現在從3開始說它要求4個元素。我試圖編寫一個通用函數,以便它可以處理數組中的任何k個元素。算法必須在O(n)中,就像具有3個元素的算子一樣。如何在n長度的數組中找到k個元素的最高積,其中k <n
def highest_product_sol(input):
high = max(input[0],input[1])
low = min(input[0],input[1])
max_prod_2 = input[0] * input[1]
low_prod_2 = input[0] * input[1]
max_prod_3 = max_prod_2 * input[2]
prod_2_high = input[0] * input[1]
prod_2_low = input[0] * input[1]
for i in range(2,len(input)):
val = input[i]
max_prod_3 = max(max_prod_3,max_prod_2*val,low_prod_2*val)
prod_2_high = high * val
prod_2_low = low * val
max_prod_2 = max(max_prod_2,prod_2_high)
low_prod_2 = min(low_prod_2,prod_2_high)
high = max(high,val)
low = min(low,val)
return (max_prod_2,low_prod_2,max_prod_3)
def highest_product_num(input,num):
high = max(input[0:num - 1])
low = min(input[0:num - 1])
print("max",high)
print("min",low)
prod_high_minus_1 = 1
prod_low_minus_1 = 1
for n in range(0,num-1):
prod_high_minus_1 *= input[n]
prod_low_minus_1 *= input[n]
max_prod_n_1 = prod_high_minus_1
min_prod_n_1 = prod_high_minus_1
max_prod_n = prod_high_minus_1 * input[num-1]
for i in range(num,len(input)):
val = input[i]
max_prod_n = max(max_prod_n,max_prod_n_1*val,min_prod_n_1*val)
prod_high_minus_1 = high * val
prod_low_minus_1 = low * val
max_prod_n_1 = max(max_prod_n_1,prod_high_minus_1)
min_prod_n_1 = min(min_prod_n_1,prod_low_minus_1)
high = max(high,val)
low = min(low,val)
return max_prod_n
test_input = [[1,2,3,4,5,6,7,8],[1,-2,3,4,5,100,2,3,1],[-10,-10,1,3,2][1000,7,-6,2,2]]
print(test_input)
for i in test_input:
print(highest_product_num(i,4),"\n")
# correct `results`
# 1680
# 6000
# 600
numpy是否可以接受? –
這個問題從哪裏來?我有一種感覺,你還沒有告訴我們什麼,或者你是在歪曲事情。我希望看到最初的問題描述。 –
我不相信O(n)對於任意k是可能的;我沒有證據,但我會估計O(n log min(k,n - k))或更糟糕的最小界限。 – ephemient