我有一個字串 S='n1,n2,n3.......nk'(例如'3,0,4,0,3,1,0,1,0,1,0,0,5, 0,4,2') 和一個數 m= S (es 9)。我想知道有多少個總和等于 m 的子串。
我使用了這個似乎有效的代碼。我有 1 秒的超時時間,這段代碼在幾毫秒的測驗中失敗了很長的數字字串(比如 10000 乘以 1)。我該如何優化它?(沒有進口!!)
def ex1(int_seq, subtotal):
list_numbers = list(map(int,int_seq.split(",")))
c = 0
count_number = list_numbers
for i in range(len(list_numbers)):
c = count_number.count(subtotal)
count_number= [a b for a,b in zip(count_number,list_numbers[i 1:]) ]
return c
與 int_seq='3,0,4,0,3,1,0,1,0,1,0,0,5,0,4,2' 和小計 = 9
輸出 = 7
uj5u.com熱心網友回復:
你有一個二次解。聽起來您需要一個線性的解決方案。這是一個簡短的提示,因為您確實應該自己解決這個問題。
嘗試創建一個累積總和accumulate,它accumulate[i]是直到并包括 的所有元素的總和i。現在對于每個索引i和元素accumulate[i],您需要找到j > i有多少個索引使得accumulate[j] == accumulate[i] subtotal. (提示,您需要保留字典映射值累積到它們的索引)。
可能有更好的解決方案,但這是第一個想到的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/333190.html
