給定一個數字,我必須找出給定數組中所有可能的索引對,其總和等於該數。我目前正在使用以下算法:更好的算法(比使用字典)枚舉具有給定總和的對。
def myfunc(array,num):
dic = {}
for x in xrange(len(array)): # if 6 is the current key,
if dic.has_key(num-array[x]): #look at whether num-x is there in dic
for y in dic[num-array[x]]: #if yes, print all key-pair values
print (x,y),
if dic.has_key(array[x]): #check whether the current keyed value exists
dic[array[x]].append(x) #if so, append the index to the list of indexes for that keyed value
else:
dic[array[x]] = [x] #else create a new array
這會在O(N)
時間內運行嗎?如果不是,那麼應該怎麼做才能做到這一點?在任何情況下,它都可以在不使用任何輔助數據結構的情況下在O(N)
時間內運行?
你是什麼意思的話題?當你要求提供解決方案而不提供代碼時,你因不顯示研究而受到處罰。當你這樣做時,你說它應該被遷移? – SexyBeast
@vascowhite(和其他密切的選民):你認爲哪個部分的FAQ「違反」?從常見問題解答:「你應該只根據你面臨的實際問題提出實際的,可回答的問題。他正在給出一個問題和他的嘗試。他還要求一個特定範圍的問題(什麼是複雜性?可以做得更好,然後O(n)?) – amit
糾正我,如果我沒有得到你的問題,但如果你想找到所有對的總和等於一個給定的數字比那些對個別都要少於這個數字。所以,假設你給了一個列表'[1,2,3,4,5,6,7,8,9,10]',你必須找到所有具有'sum == 6'的對首先將列表過濾掉到[1,2,3,4,5,6],然後找到那些對。 – RanRag