簡體   English   中英

如果給定數字是列表中存在的兩個不同數字的總和,如何僅一次返回“True”?

[英]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 + 717.

獎勵:你能一次完成嗎?

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM