How to Return Recurring Elements in a Javascript Array With O(n) Time Complexity

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.