0

我有这个关于我似乎无法解决的数组的问题。我想要做的是返回不在数组内的数字。仅当新值不在数组内时才能返回,否则它将增加值(以确保没有空格)。

我的代码如下:

function create_number(number) {
  var array = [1,2,3,6,7,8,9];
  for (var i=0;i<array.length;i++) {
    if (array[i] == number) {
      return number;
    } else {
      // create a new number that is not inside the array, and return it.
    }
    // If not just do the loop again. 
    // If the loop is over, then just create a valid number 
    // that is not found inside the array.
  }
}
4

1 回答 1

3
var array = [1,2,3,6,7,8,9];
var number = 0;
while (true) {
    if (array.indexOf(++number) == -1) {
        array.push(number);
        return number;
    }
}

array但你需要在某个地方坚持

PS:用于古代浏览器的Array.prototype.indexOf垫片(感谢 @Lochemage)

PPS:上面的解决方案是O(N^2),只是为了好玩,这里是O(N)一个(它需要array最初排序):

var array = [1,2,3,6,7,8,9];
var number = 1;
while (true) {
    if (array[number - 1] != number) {
        array.splice(number - 1, 0, number);
        return number;
    }
    ++number;
}
于 2013-08-20T23:45:09.473 回答