Вопрос:
Эту проблему недавно задал Google.
Учитывая список чисел и число k
, вернуть любые два числа из списка в сумме k
.
Например, учитывая [10, 15, 3, 7]
и k
из 17
, вернуть true, поскольку 10 + 7
равно 17
.
Бонус: сможете ли вы сделать это за один проход?
Решение [pyth3.8]:
def find2sum(arr,key):
```для i в диапазоне (len(arr)):
``````для j в диапазоне (i,len(arr)):< br /> ``````````if a[i]+a[j]==key:
````````````` возвращает True
```вернуть False
a = list(map(int,input().split()))
k = eval(input())
печать (найти2сумму (а, к))
Это требует временной сложности O (n²).
def find2sum(arr,key):
```arr.sort()
```для i,j в zip([k для k в диапазоне(len(arr))],[x для x в диапазоне (len(arr)-1,-1,-1)]):
``````sumo = arr[i]+arr[j]
```` ``if sumo‹key:
`````````i+=1
``````elif sumo›key:
```````` `j-=1
``````else:
`````````возвратить True
```вернуть False
a = list(map(int,input().split()))
k = eval(input())
печать (найти2сумму (а, к))
Это требует временной сложности O (n).
Доказательство по индукции. Пусть a[0,n]
— массив длины n+1 и p = (p1, p2)
, где p1, p2 — целые числа, а p1 <= p2
(w.l.o.g.). Предположим, что a[0,n]
содержит p1 и p2. В случае, если это не так, алгоритм, очевидно, верен.