How to find the number occurring an odd number of times

Overview

How do we find a number that occurs an odd number of times from a list of positive integers? We also know that all numbers occur an even number of times.

Example 1:

  • Input: lst - [1, 1, 2, 4, 3, 5, 7, 1, 2, 3, 4, 1, 7]
  • Output: 5

Example 2:

  • Input: lst - [10]
  • Output: 10

Solution

The intuition here is to use bitwise XOR on all the list elements. This method works because:

  • XOR of a number with itself results in zero that is n ^ n = 0

  • XOR of a number with zero results in the number, that is n ^ 0 = n.

  • Cumulative property of XOR that is being ^ n = n ^ m`

  • Time Complexity - O(n)

  • Space Complexity - O(1)

Code

Let’s view a code example.

class Main{
static int findOddOccurringElement(int[] arr) {
if(arr.length == 0) return -1;
int xor = arr[0];
for(int i=1; i< arr.length;i++)
xor = xor ^ arr[i];
return xor;
}
public static void main(String[] args) {
int[] arr = {1, 1, 2, 4, 3, 5, 7, 1, 2, 3, 4, 1, 7};
System.out.println("The odd occurring element is " + findOddOccurringElement(arr));
}
}

Explanation

  • Lines 3–10: We define the findOddOccurringElement() method, which finds the element occurring an odd number of times using the solution described above.
  • Line 13: We define an Array arr.
  • Line 14: We define the findOddOccurringElement() method to find the odd occurring element in arr.

Free Resources