diff --git a/Bit-Manipulation/UniqueElementInAnArray.js b/Bit-Manipulation/UniqueElementInAnArray.js new file mode 100644 index 000000000..74b5fe95a --- /dev/null +++ b/Bit-Manipulation/UniqueElementInAnArray.js @@ -0,0 +1,13 @@ +/** + * Finds the unique element in an array where all other elements are repeated twice. + * + * @param {number[]} arr - The input array of integers. + * @returns {number} The unique element. + * + * @example + * const arr = [1, 2, 1, 2, 3]; + * const uniqueElement = findUniqueElement(arr); // Returns 3 + */ +const findUniqueElement = (arr) => arr.reduce((acc, val) => acc ^ val, 0) + +export { findUniqueElement } diff --git a/Bit-Manipulation/test/UniqueElementInAnArray.test.js b/Bit-Manipulation/test/UniqueElementInAnArray.test.js new file mode 100644 index 000000000..4aa66bc8b --- /dev/null +++ b/Bit-Manipulation/test/UniqueElementInAnArray.test.js @@ -0,0 +1,10 @@ +import { findUniqueElement } from '../UniqueElementInAnArray' + +describe('UniqueElementInAnArray', () => { + it.each([ + [[1, 2, 1, 3, 3], 2], + [[1, 2, 3, 4, 5, 4, 3, 2, 1], 5] + ])('should return an unique element from an array', (arr, expected) => { + expect(findUniqueElement(arr)).toBe(expected) + }) +})