Skip to content

Instantly share code, notes, and snippets.

@p0rsche
Last active January 22, 2023 14:32
Show Gist options
  • Save p0rsche/335cf5fbdad35f03f3ba3c2e1aec8e58 to your computer and use it in GitHub Desktop.
Save p0rsche/335cf5fbdad35f03f3ba3c2e1aec8e58 to your computer and use it in GitHub Desktop.
Find missing number in an array of n-1 numbers
/**
* Дан массив 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