JavaScript实现数组缺失最小正整数遇问题,求排查逻辑错误
找出序列中缺失的最小正整数:代码错误分析
你的实现代码
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的检查
比如输入[2,3,4],过滤排序后为[2,3,4]。你的代码会遍历所有元素,认为相邻元素连续,最终返回5,但正确答案是1——1是最小的正整数且不在序列中,你的逻辑直接从数组首元素开始判断连续性,完全跳过了这个最关键的起始场景。单元素数组处理逻辑错误
当输入是[2]时,代码返回3,但正确答案是1;只有输入是[1]时返回2才正确。你的单元素判断直接返回元素+1,没有考虑“元素本身大于1”的情况,这会导致大量基础测试用例失败。循环边界判断存在漏洞
遍历到数组最后一个元素时,next为undefined,此时curr !== next和curr+1 !== next都会成立,代码会返回curr+1。这个逻辑在[1,2,3]时正确(返回4),但在[2,3,4]时会错误返回5,本质还是没先检查1是否存在。
额外性能问题
代码使用了sort()方法,时间复杂度为O(n log n),而该问题可以通过O(n)时间复杂度的解法实现,这也是得分低的原因之一,但核心扣分点还是上述逻辑漏洞。
内容的提问来源于stack exchange,提问作者myol
相关产品推荐
相关产品推荐

