mirror of
https://hub.njuu.cf/TheAlgorithms/Python.git
synced 2023-10-11 13:06:12 +08:00
f39e16846b
for more information, see https://pre-commit.ci
49 lines
1.1 KiB
Python
49 lines
1.1 KiB
Python
"""
|
|
Author : Siddharth Warrier
|
|
Date : October 3, 2023
|
|
|
|
Task:
|
|
Count the no of pairs in a given array with given sum
|
|
|
|
Implementation notes: Using hashing
|
|
The idea is that we hash the array in a dictionary
|
|
Then go through the elements of the array
|
|
We subtract this with the given sum
|
|
and check if that is there in the array
|
|
We also check the edge cases like if there are multiple same elements
|
|
Finally we divide the count by 2
|
|
to avoid the same pair getting counted twice
|
|
"""
|
|
|
|
|
|
def pairs_with_sum(arr: list, req_sum: int) -> int:
|
|
"""
|
|
Return the no. of pairs with sum "sum"
|
|
|
|
>>> pairs_with_sum([1,5,7,1],6)
|
|
2
|
|
>>> pairs_with_sum([1,1,1,1,1,1,1,1],2)
|
|
28
|
|
>>> pairs_with_sum([1,7,6,2,5,4,3,1,9,8],7)
|
|
4
|
|
"""
|
|
d: dict = {}
|
|
for i in arr:
|
|
if i in d:
|
|
d[i] += 1
|
|
else:
|
|
d[i] = 1
|
|
ans = 0
|
|
for i in arr:
|
|
d[i] -= 1
|
|
if req_sum - i in d and d[req_sum - i] != 0:
|
|
ans += d[req_sum - i]
|
|
d[i] += 1
|
|
return ans // 2
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import doctest
|
|
|
|
doctest.testmod()
|