DEV Community

Cover image for Codewars: Find the odd int
CLeeBenjamin
CLeeBenjamin

Posted on

Codewars: Find the odd int

This problem on codewars asks the following:

Given an array, find the integer that appears an odd number of times. There will always be exactly one integer that appears an odd number of times.

Example: (Input --> Output)

findOdd([20, 1, 1, 2, 2]) = 20
findOdd([5, 4, 3, 2, 1, 5, 4, 3, 2, 10, 10]) = 1
Enter fullscreen mode Exit fullscreen mode

How to approach it with the PEDAC method:

P: Understand the problem -
We need to identify which number in an array appears an odd number of times. Although each number can appear multiple times, only one will appear an odd number of times.

E: Give Example -
In an array like [8, 8, 7, 7, 7], 7 shows up 3 times (odd), making it our target.
For [1, 1, 2], 2 appears just once (odd), pinpointing it as the solution.

D: What data structure(s) would be needed -
An object seems perfect for mapping each number to its occurrence count within the array.

A: Steps to solve it without language specific information -

- Loop first through the array: This allows me to inspect each number individually.

- If I arrive at a number, add it to a data structure: object

- Check if the number has been encountered before. If not, initialize its count in the object. If the number is already in the object, increment its count

- Loop through the object to inspect counts and return the odd number of counts

C: Code the solution guided by the pseudocode-

- Loop first through the array

for (let i of A) {
Enter fullscreen mode Exit fullscreen mode

- If I arrive at a number, add it to a data structure: object
- Check if the number has been encountered before. If not, initialize its count in the object. If the number is already in the object, increment its count

  if (!values[i]) {
    values[i] = 1;
  } else {
    values[i] += 1;
  }
}
Enter fullscreen mode Exit fullscreen mode

- Loop through the object to inspect counts and return the odd number of counts

for (let k in values) {
  if (values[k] % 2 === 1) {
    return Number(k);
  }
}
Enter fullscreen mode Exit fullscreen mode

Putting it all together in the function findOdd:

function findOdd(A) {
  let values = {};

  // Loop first through the array
  for (let i of A) {
    // Check if the number has been encountered before
    if (!values[i]) {
      values[i] = 1; // If not, initialize its count
    } else {
      values[i] += 1; // If it has, increment its count
    }
  }

  // Loop through the object to find and return the number with an odd count
  for (let k in values) {
    if (values[k] % 2 === 1) {
      return Number(k);
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)