使用JavaScript

问题描述 投票:0回答:2

我需要从1开始找到最低的未使用数字,因此在这种情况下将为3.

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

修理数组未排序,您始终从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);

javascript
2个回答
4
投票

如果您并不总是以零开始,请使用偏移:

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);
logs回答7,因为2之后没有丢失,从而开始序列。

该序列从一个数字开始(例如示例中的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);
}

示例:


2
投票

在交换可读性时,它比另一个示例的优化程度略低,因为它可以在数组中的所有项目上循环,而不是一旦找到缺失的项目就破裂。


感谢您对Ed Bayiates。 您的代码线帮助我解决了一个类似的问题。 我将您的代码扩展了一点,因为我缺少一个小细节。 现在,它确保最低未使用的数字永远不会为“ 0”。

let k = [1,3,4]; function getLowestFreeNumber(){ let lowestUnusedNumber = -1; if (k.length === 0) { lowestUnusedNumber = 1; return lowestUnusedNumber; } k.sort((a, b) => a - b); for (let i = 0; i < k.length; ++i) { if (k[i] > 0 && k[i] != i + 1) { lowestUnusedNumber = i + 1; break; } } if (lowestUnusedNumber == -1) { lowestUnusedNumber = k[k.length - 1] + 1; } return lowestUnusedNumber; } console.log(getLowestFreeNumber())
我希望这几行代码能帮助某人...

© www.soinside.com 2019 - 2025. All rights reserved.