A zero-indexed array A consisting of N different integers is given. The array contains integers in the range [1..(N + 1)], which means that exactly one element is missing.

Your goal is to find that missing element. So in [2,3,1,5] you should return 4.

This must be done in O(N) time. N can range from 0 to 100,000 (so guard against empty arrays). Each element in A is distinct and ranges from 1 to N+1.

Language used: C++

Solution 1
One solution is to sort the array and look for two numbers whose difference is larger than one.

permmiss1This means you can quickly interrogate whether 1 is the missing element, because it would be A[0], and the last number must be N+1. The approach requires you to explicitly ensure the array is not empty.

Solution 2: Recursion

If you really want you can use recursion to sum the numbers that you should have, and the difference between that and the numbers in A will give you the missing number.  At the time of writing Codility gave me 100% for this. However Visual Studio gave me a very upset Stack Overflow with my current stack parameters:

permmiss2

Solution 3: Looping

Recursion can be a useful technique, and this is a very simple exercise to try it with. However it is completely unneccessary here. We can just use a loop to sum the ints in the array and what we would expect to have, then take the difference as our answer:

permmiss3