Question

I have an array...

[8, 2, 5, 3, 0, 9, 1, 6, 7]

How do I get the smallest number, not listed in the array? 4 in this case.

The only thing I can think of is, but I would like to get rid of the while loop if I could.

var list = [8, 2, 5, 3, 9, 1, 6, 7];
var num = -1;
var done = false;
while (!done) {
  num++;
  if(!_.contains(list, num)) {
    done = true;
  }
}

No correct solution

OTHER TIPS

You could sort the array in n lg n time and start at the beginning and find the first gap.

This solution solves for the lowest number between the min and max. Otherwise, computationally, yours Is the best.

Try this:

function findLowest(n, xs) {
    return xs.indexOf(n) < 0 ? n : findLowest(n + 1, xs);
}

Now all you need to do is:

var n = findLowest(0, [8, 2, 5, 3, 0, 9, 1, 6, 7]);

alert(n); // 4

See the demo for yourself: http://jsfiddle.net/9pXGR/

The findLowest function will find the lowest number not in the list starting from a given number n.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top