Problem
In an unsorted vector vec
of numbers we need to find any pair (Tuple
) with a provided sum
.
Example 1:
Input: vec = [8, 7, 2, 5, 3, 1]
, sum = 10
Output: (2, 8)
Example 2:
Input: vec = [5, 2, 6, 8, 6, 9]
, sum = 12
Output: (6, 6)
Example 3:
Input: vec = [5, 2, 6, 8, 1, 9]
, sum = 12
Output: None
Solution
fn find_pair_with_given_sum(vec: &Vec<i32>, sum: i32) -> Option<(i32, i32)> {
let mut set = HashSet::new();
for e in vec {
let another = sum - e;
match set.get(&another) {
Some(_) => return Some((*e, another)),
_ => {
set.insert(e);
}
}
}
return None;
}
Explanation
We iterate over elements in the vector vec
and for each element e
try to find sum - e
element in the created earlier HashSet set
. If we could not find sum - e
in the set, then we just add the element e
to the set
. If we've found sum - e
in the set
, then we immediately return (e, sum - e)
as the found pair. If we've iterated over the entire vector and didn't find a pair, then we just return None
.
Complexity
The time complexity of this solution is O(n)
(n
is a size of the input vector). Also the solution requires O(n)
extra space for the HashSet
we created.