JavaScript中最小的未使用ID
我正在尝试这个关于Codewars的测验: 您有很多数据要管理,当然,您使用零基和非负ID使每个数据项都是唯一的 因此,您需要一个方法,该方法返回下一个新数据项的最小未使用ID 注意:给定的已用ID数组可能未排序。出于测试原因,可能存在重复的ID,但您不必查找或删除它们 简而言之,您将获得一个数组。测验要求的是找出最小的未使用的数字 例如:JavaScript中最小的未使用ID,javascript,arrays,Javascript,Arrays,我正在尝试这个关于Codewars的测验: 您有很多数据要管理,当然,您使用零基和非负ID使每个数据项都是唯一的 因此,您需要一个方法,该方法返回下一个新数据项的最小未使用ID 注意:给定的已用ID数组可能未排序。出于测试原因,可能存在重复的ID,但您不必查找或删除它们 简而言之,您将获得一个数组。测验要求的是找出最小的未使用的数字 例如: [0,1,2,3,5] // Output: 4 [1,2,3,5] // Output: 0 [0,1,2,3,4,5] // Output: 6 [0,
[0,1,2,3,5] // Output: 4
[1,2,3,5] // Output: 0
[0,1,2,3,4,5] // Output: 6
[0,0,0,0,0,0] // Output: 1
[0,1,0,2,0,3] // Output: 4
我的代码无法通过一些测试。测试的输入是隐藏的,所以我无法找出原因。是什么导致了这个问题
const nextId=ids=>{
让洛维斯蒂德;
if(Math.max(…ids)+1==ids.length){
lowstid=Math.max(…id)+1;
}否则{
让sortedis=ids.sort((a,b)=>a-b);
for(设i=0;i log(nextId([0,1,0,2,0,3])//4
你把它复杂化了
function doStuff(stuff)
{
for(let i = 0; i < stuff.length + 1; i++)
{
if(stuff.indexOf(i) == -1)
return i;
}
}
函数doStuff(stuff)
{
for(设i=0;i
看起来您错过了这一行说明:
注意:给定的已用ID数组可能未排序。出于测试原因,可能存在重复的ID,但您不必查找或删除它们
根据代码的逻辑,如果存在重复项,则该值将与索引不匹配。您需要实际比较这些值以考虑重复项
function nextId(ids) {
let lowestId = 0;
let sortedIds = ids.sort((a, b) => a - b);
for (let i = 0; i < sortedIds.length; i++) {
if (lowestId === sortedIds[i] && lowestId !== sortedIds[i + 1]) {
lowestId++;
}
else if (lowestId !== sortedIds[i + 1]) {
return lowestId;
}
}
return lowestId
}
函数nextId(ids){
设lowstid=0;
让sortedis=ids.sort((a,b)=>a-b);
for(设i=0;i
这种方法将对象作为可见值
开始节点是-1
,因为第一个缺少的id
可能为零
性能:
- 要收集所有节点:O(n)
- 要查找缺少的最小
:小于O(n)id
函数nextId(ids){
const seen={};
设id=-1;
for(id的常量id)seed[id]=true;
而(见[++id]);
返回id;
}
log(nextId([0,1,2,3,5]);//4.
log(nextId([1,2,3,5]);//0
log(nextId([0,1,2,3,4,5]);//6.
log(nextId([0,0,0,0,0,0]);//1.
log(nextId([0,1,0,2,0,3]);//4
请对问题中引用的部分使用blockquote标记,并准确说出问题所在。例如,Codewars给了您什么错误?暂停?有些要求没有达到?什么?排序后,只需找到不等于索引的数字?如果返回undefined,则返回array.length
@adiga-如果需要排序的话。示例输入已排序。@T.J.Crowder链接提到未排序的数组,OP的代码具有sort
@adiga-依赖外部链接获取问题内容的风险。:-)非常感谢您的回答:)我很抱歉,但在发布此答案后,我在示例中添加了一些输入。如果您能看一下,我将不胜感激。它与您提供的所有console.log示例一起工作,所以我不知道您现在想要什么!非常感谢。它通过了测试,将函数名从doStuff
更改为nextId
:)includes会更好谢谢您。有效:)