Contains duplicates
We need to check if a given array has some duplicate values.
Example: [1,1,2] = True [1,2,3] = False
Option 1:
We can just loop over the list twice and compare each value. This would give us a runtime of Time: O(n^2) and Space: O(n)
bool contains_duplicates(std::vector<int> &input) {
for (int i = 0; i < input.size(); i++) {
for (int j = i + 1; j < input.size(); j++) {
if (input[i] == input[j]) {
std::cout << "Found duplicates " << input[i] << " and " << input[j]
<< std::endl;
return true;
}
}
}
return false;
}
def contains_duplicates(input: List[int]) -> bool:
for i in range(len(input)):
for j in range(i+1,len(input)):
if input[i] == input[j]:
return True
return False
Better Solution:
We can keep track of already seen values in a set. A set has a runtime of O(1) for finding an item by a key.
This would give us a runtime of Time: O(n) and Space: O(n)
bool contains_duplicates(std::vector<int> &input) {
std::unordered_set<int> seen;
for(auto &i :input){
if(seen.find(i) != seen.end()) return true;
seen.insert(i);
}
return false;
}
def contains_duplicates(input: List[int]) -> bool:
seen = set()
for num in input:
if num in seen:
return True
seen.add(num)
return False