![](/img/trans.png)
[英]How to if given a list of integers and a number called x, return recursively the sum of every x'th number in the list
[英]How to return 'True' if given number is the sum of two different number present in the list , in one pass only?
有人可以告訴我以下解決方案是否可以“一次通過”嗎?
給定一個數字列表和一個數字k
,返回列表中的任意兩個數字是否相加為k
。
例如,給定[10, 15, 3, 7]
和k
of 17
,返回True
因為10 + 7
是17.
獎勵:你能一次完成嗎?
def verify(list):
for i in range(len(list)):
j = k - list[i]
if j in list:
return True
return False
我想出了兩個解決方案。
第一個,我很確定是你被要求的那個,做所有可能的總和 - 最壞的情況 - 只通過一次:
def verify_2(l,k):
i = 0
j = 0
n = len(l)
while i < n - 1:
j = i + 1
while j < n:
if l[i] + l[j] == k:
return True
j = j + 1
i = i + 1
return False
print(verify_2(l = [10,15,3,7], k = 17)) #RETURNS TRUE
print(verify_2(l = [10,15,3,7], k = 6)) #RETURNS FALSE
另一個效率較低(因為它必須首先對向量進行排序,這至少已經具有n*log(n)
復雜性),並且您必須手動執行另一遍。 這不是你被要求的,但因為它更容易理解,所以我也把它留給你:
def verify(l,k):
l.sort()
for i in range(len(l) - 1):
if l[i] + l[i+1] == k:
return True
return False
print(verify(l = [10,15,3,7], k = 17)) #RETURNS TRUE
print(verify(l = [10,15,3,7], k = 6)) #RETURNS FALSE
PS1 第一個解決方案比第二個解決方案快得多。
PS2 關於您的解決方案,我必須告訴您幾件事。 避免對變量或參數使用單詞“list”,因為它是 Python 語言中的一個單詞,保留用於將另一種數據類型轉換為數據類型“list”(即如果您有s = "hello"
並且您執行s = list(s)
然后你得到 s 有['h','e','l','l','o']
里面)。 還要記住,function header(低於 def...)下面的所有代碼都需要縮進,四個空格、兩個空格或一個制表符(否則會出現解釋錯誤)。 您還應該注意,在您的解決方案中使用了k
,但它不是定義的變量; 您應該將它作為參數傳遞或在 function 中定義它,否則您將無法使用它(建議使用前者,而不是后者)。 即使考慮到這一點,你的 function 也沒有按照文中的要求去做:它實際上在 for 循環的每一步都從 k 中減去第 i 個元素,並在每次迭代中檢查減法的結果是否屬於列表.
抱歉,伙計們,我發現很難找到您建議的線程的答案,解決方案主要在 Java 中。您能看看這個其他提議嗎:首先,我們創建列表的副本。 .
def verify(l, K):
for i in range(len(l)):
j = k - l[i]
if j in l:
return True
l = l.pop([i])
return False
謝謝!
使用 itertools 組合獲取列表中所有可能的數字對。
from itertools import combinations
li =[10, 15, 3, 7]
k =17
answer = k in (map(sum,combinations(li,2)))
print(answer)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.