Last active
January 22, 2023 14:32
-
-
Save p0rsche/335cf5fbdad35f03f3ba3c2e1aec8e58 to your computer and use it in GitHub Desktop.
Find missing number in an array of n-1 numbers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Дан массив A из n — 1 целых чисел, находящихся в интервале от 1 до n. | |
* Все числа встречаются в нём ровно один раз, за исключением одного отсутствующего числа. | |
* Найти это отсутствующее число. | |
*/ | |
const findMissingNumber = (A, n) => { | |
// XORing from 1 to n+1 | |
let result = new Array(n).fill(null).map((_, i) => i).reduce((acc, cur) => { | |
return acc ^= cur | |
}, 0) | |
return A.reduce((acc, cur) => acc ^= cur, result) | |
} | |
//selecting n | |
const n = 10 | |
console.log('n:', n) | |
//generating an array of n -1 values | |
const arr = new Array(n).fill(null).map((_, i) => i) //note that i starts from 0, so i = n - 1 | |
console.log('Original array:', arr) | |
// removing random number from an array | |
const missingNumber = Math.floor(Math.random() * n) | |
console.log('Missing number:', missingNumber) | |
const idxMissingNumber = arr.findIndex(val => val === missingNumber) | |
let changedArr = [...arr] | |
changedArr.splice(idxMissingNumber, 1) | |
console.log('Array without missing number:', changedArr) | |
console.log('Result of fn: ', findMissingNumber(changedArr, n)) | |
/** | |
* Та же функция работает и для поиска дубликатов из следующий задачи: | |
* Дан массив A из n + 1 целых чисел, находящихся в интервале от 1 до n. | |
* Все числа встречаются ровно один раз, за исключением одного числа, которое повторяется. | |
* Найти это повторяющееся число. | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment