MissingInteger
by me, Javascript
Problem: Write a function that, given an array A of N integers, returns the smallest positive integer (greater than 0) that does not occur in A.
Solution:
If there is no array or the array has no length, we'll return 0.
if (!A || !A.length) return 0
Then I sorted the array from smallest to largest.
A.sort((a, b) => a - b)
Then I created a new Set and add each positive integer to the Set so I can have a collection without duplicate numbers.
let p = new Set()
A.forEach(function (value) {
if (value > 0) p.add(value)
})
Then if the set doesn't have a size, I return 1 since it is the first postive integer missing.
if (!p.size) return 1
I then loop through the set (starting with 1 to the size of the set) checking if the index number exists in the set. If it doesn't, I return that number as the smallest positive integer. If the loop completes without returning anything, I then return the set size plus one as the smallest integer.
for (i = 1; i <= p.size; i++) {
if (!p.has(i)) return i
}
return p.size + 1
Here is the completed function that satisfied the solution scoring 100%.
function solution(A) {
if (!A || !A.length) return 0
A.sort((a, b) => a - b)
let p = new Set()
A.forEach(function (value) {
if (value > 0) p.add(value)
})
if (!p.size) return 1
for (i = 1; i <= p.size; i++) {
if (!p.has(i)) return i
}
return p.size + 1
}
Again, I'm sure there are many other possibilities but this worked for me.