使用Javascript查找数组中最低的未使用数字

时间:2015-06-05 17:53:27

标签: javascript

我有一个数组的数组。这是一个例子:

myArray = [0,1,2,4,5];

我需要找到从1开始的最低未使用数字,所以在这种情况下它将是3。

我一直在阅读使用indexOf,但我不确定如何将其用于我的特定用途。

2 个答案:

答案 0 :(得分:3)

假设阵列没有排序,你总是从0开始,并考虑到你想要找到一个最高号码的愿望,如果没有一个号码丢失:

var k = [6, 0, 1, 2, 4, 5];

k.sort(function(a, b) { return a-b; });   // To sort by numeric

var lowest = -1;
for (i = 0;  i < k.length;  ++i) {
  if (k[i] != i) {
    lowest = i;
    break;
  }
}
if (lowest == -1) {
    lowest = k[k.length - 1] + 1;
}
console.log("Lowest = " + lowest);

记录答案3.如果还有3,则记录7,因为没有其他号码缺失。

如果您不是始终从零开始,请使用偏移:

var k = [6, 2, 3, 4, 5];

k.sort(function(a, b) { return a-b; });   // To sort by numeric

var offset = k[0];
var lowest = -1;
for (i = 0;  i < k.length;  ++i) {
  if (k[i] != offset) {
    lowest = offset;
    break;
  }
  ++offset;
}
if (lowest == -1) {
    lowest = k[k.length - 1] + 1;
}
console.log("Lowest = " + lowest);

记录答案7,因为在2开始序列之后没有遗漏。

答案 1 :(得分:0)

这将从一个数字开始(从您的示例中为1)开始,并返回序列中最低的未使用数字。

function lowestUnusedNumber(sequence, startingFrom) {
  const arr = sequence.slice(0);
  arr.sort((a, b) => a - b);

  return arr.reduce((lowest, num, i) => {
    const seqIndex = i + startingFrom;
    return num !== seqIndex && seqIndex < lowest ? seqIndex : lowest
  }, arr.length + startingFrom);
}

示例:

> lowestUnusedNumber([], 1)
1
> lowestUnusedNumber([1,2,4], 1)
3
> lowestUnusedNumber([3], 1)
1

为了换取可读性,它的优化程度略低于其他示例,因为它会遍历数组中的所有项目,而不是在找到缺少的项目时立即中断。