[英]Find maximum sum of sublist in list of positive integers under O(n^2) of specified length Python 3.5
對於我的編程問題之一,我需要定義一個函數,該函數接受兩個變量,即長度為l的列表和整數w。 然后,我必須找到列表中長度為w的子列表的最大和。
條件:
1 <= W <= 1 <= 10萬
列表中的每個元素的范圍是[1,100]
目前,我的解決方案在O(n ^ 2)(如果我錯了,請糾正我,下面的代碼)中工作,自動分級機不接受,因為我們需要找到一個更簡單的解決方案。
我的代碼:
def find_best_location(w, lst):
best = 0
n = 0
while n <= len(lst) - w:
lists = lst[n: n + w]
cur = sum(lists)
best = cur if cur>best else best
n+=1
return best
如果有人能夠找到更有效的解決方案,請告訴我! 另外,如果我錯誤地計算了big-O表示法,請也告訴我!
提前致謝!
1)找到和current
第一的w
元素,將其分配到best
。
2)從i = w
: current = current + lst[i]-lst[iw]
, best = max(best, current)
。
3)完成。
您的解決方案的確是O(n^2)
(或者,如果您想更嚴格地限制,則為O(n*W)
)
您可以通過創建aux數組sums
在O(n)中執行以下操作:
sums[0] = l[0]
sums[i] = sums[i-1] + l[i]
然后,通過迭代並檢查sums[i] - sums[iW]
您可以在線性時間內找到解決方案
您甚至可以即時計算sums
數組以減少空間復雜性,但是如果您是我,我將從它開始,然后看看是否可以升級我的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.