我需要找到在陣列10級最大的子陣列(最大長度)與條件arr[high] - arr[low] < delta
。現在需要50秒(使用Python)。我可以通過修改算法找到最大的子數組,以找到sum < somevalue
的最大子數組。現在,我只是使用for循環並刪除每次迭代後發現的最大子數組。我嘗試了很多東西,但是現在回到了這裏,因爲沒有任何工作正確。該數組已排序。如何有效地找到10個最大的子陣列?
with open(in_file) as f_in, open(out_file, 'w') as f_out:
dct = {}
mainlst = []
# Read a file and store values in mainlst and map to some strings using dct
for i in range(10):
start = 0
end = 0
maxim = 0
diff = 0
current = 1
max_start = 0
max_end = 0
while end < len(mainlst)-1:
end += 1
diff = mainlst[end] - mainlst[start]
current += 1
while diff > delta:
start += 1
diff = mainlst[end] - mainlst[start]
current -= 1
if maxim < current:
maxim = current
max_start = start
max_end = end
print("".join([dct[mainlst[max_start]], ",", str(maxim)]), file=f_out)
del mainlst[max_start:max_end+1]
編輯:我忘了提及另一個條件。子陣列不能重疊。
你的意思是你有一個數組的數組,並希望找到10分最長的? – Ali
不,我有一個數組,需要找到最長的子數組。 –
需要50秒的輸入大小?在輸入10次 – m69