我正在使用javascript尝试this question。当我在网站上运行我的实现时,我得到了11%,这不包括糟糕的运行时状态,我失败了四个隐藏的测试。
我不明白我的实现是如何失败的。我知道这不是一个伟大的实现,在链接的问题中有更清晰的工作答案,但我仍然很好奇 * 我使用了什么错误的逻辑 *。
A = A.filter(a => a > 0).sort()
if (A.length === 0) {
return 1
}
if (A.length === 1) {
return A[0] + 1
}
for (let i = 0; i < A.length; i++) {
let curr = A[i]
let next = A[i + 1]
if (curr !== next && (curr + 1) !== next) {
return curr + 1
}
}
我的逻辑是,因为我正在从最低到最高遍历一个正整数的有序数组,如果当前元素+ 1不等于后面的元素(即[5,7]将是5 + 1!= 7),则存在一个间隙,这是缺失的整数。
如果循环一直到最后,最后一个if
语句仍然会被触发,因为next是undefined
,它将返回max值+ 1。
2条答案
按热度按时间bqujaahr1#
不用对数组进行排序,只需查找数组的最大值并在函数中使用它。注意,不用处理数组,可以使用set。set
.has
方法比include
方法快。iklwldmw2#
这个解决方案并不是最有效的,但是这个过程在一个逐步的大纲中进行了解释,这应该可以帮助你看到OP失败的地方(特别是缺少一个正确的
.sort()
数字的函数)。Set
以消除任何重复的数字。Set
转换回带有括号和spread运算符的数组。.sort()
通过在每次迭代中使用a - b
函数以升序对数组进行数字化。.filter()
数组,以便只保留大于0的数字。1
,则添加一个简单的控制语句来短路函数。1
,则返回1
*。.flatMap()
遍历数组,通过三元条件运算符返回数组序列中缺失的正整数。a[i + 1]
大于当前数字+1:n + 1
...*||
,如果下一个数字:a[i + 1]
是undefined
...n + 1
否则返回空数组(将被.flatMap()
展平为空)*