How to Return Recurring Elements in a Javascript Array With O(n) Time Complexity
Hello there!
In this article, I’ll be showing you how to return recurring elements in a Javascript Array WIth O(n) Time complexity.
First, I’ll be showing you the wrong way to do it, then the correct way.
Let’s consider the given array;
const numbers = [1, 3, 2, 1, 2, 3, 4, 5, 6, 4];
METHOD 1
const findDuplicates = (arr) => {
const duplicates = [];
arr.forEach((number, index) => {
if (index !== arr.lastIndexOf(number)) {
duplicates.push(number);
}
});
return duplicates;
};
//findDuplicates(numbers) will return [ 1, 2, 3, 4, 6 ]
In as much as this is the quickest method one can think of, under the hood has a nested loop which in turn returns an O(n)^2 time complexity.
So we move on to method 2.
METHOD 2
In the second method, we’ll be using something called a hashMap. A hashMap is a data structure that allows us to store key-value pairs and we can use non-primitive datatype to store the data.
The Map will return the key and value pairs in the same order we inserted and it retrieves this in O(n) time-complexity.
So our second solution will look like this;
const findDuplicates = (arr) => {
const duplicates = [];
const map = new Map();
arr.forEach((number) => {
if (map.get(number)) {
duplicates.push(number);
} else {
map.set(number, number);
}
});
return duplicates;
};
//findDuplicates(numbers) will return [ 1, 2, 3, 4, 6 ]
I do hope you’ve found this helpful, Thanks.