DEV Community

Cover image for Codewars: Find the odd int
CLeeBenjamin
CLeeBenjamin

Posted on

3 1

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

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

Top comments (0)

AWS Security LIVE!

Tune in for AWS Security LIVE!

Join AWS Security LIVE! for expert insights and actionable tips to protect your organization and keep security teams prepared.

Learn More

👋 Kindness is contagious

Discover a treasure trove of wisdom within this insightful piece, highly respected in the nurturing DEV Community enviroment. Developers, whether novice or expert, are encouraged to participate and add to our shared knowledge basin.

A simple "thank you" can illuminate someone's day. Express your appreciation in the comments section!

On DEV, sharing ideas smoothens our journey and strengthens our community ties. Learn something useful? Offering a quick thanks to the author is deeply appreciated.

Okay