-
-
Notifications
You must be signed in to change notification settings - Fork 223
Expand file tree
/
Copy pathoddOccurrences.js
More file actions
63 lines (49 loc) · 1.44 KB
/
oddOccurrences.js
File metadata and controls
63 lines (49 loc) · 1.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// Optimal solution using XOR: TC: O(n), SC: O(1)
function findOddNumber(nums) {
let result = null;
for(const num of nums) {
result ^= num;
}
return result;
}
// Using Object/Map with frequencies: TC: O(n), SC: O(n)
function findOddNumberObj(nums) {
const freqObj = {};
for(const num of nums) {
freqObj[num] = (freqObj[num] || 0) + 1;
}
for(const [key, value] of Object.entries(freqObj)) {
if(value%2 !== 0) {
return parseInt(key);
}
}
return null;
}
// Using Object keys : TC: O(n), SC: O(n)
function findOddNumberOccurrence(nums) {
const obj = {};
for(const num of nums) {
if(obj[num]) {
delete obj[num];
} else {
obj[num] = true;
}
}
return Number(Object.keys(obj)[0]);
}
const nums1 = [9, 3, 9, 3, 9, 7, 9];
const nums2 = [1, 1, 2];
const nums3 = [4];
const nums4 = [5, 5, 5];
console.log(findOddNumber(nums1)); // 7
console.log(findOddNumber(nums2)); // 2
console.log(findOddNumber(nums3)); // 4
console.log(findOddNumber(nums4)); // 5
console.log(findOddNumberObj(nums1)); // 7
console.log(findOddNumberObj(nums2)); // 2
console.log(findOddNumberObj(nums3)); // 4
console.log(findOddNumberObj(nums4)); // 5
console.log(findOddNumberOccurrence(nums1)); // 7
console.log(findOddNumberOccurrence(nums2)); // 2
console.log(findOddNumberOccurrence(nums3)); // 4
console.log(findOddNumberOccurrence(nums4)); // 5