JavaScript函数either404逻辑错误排查:修正相邻0/4判断逻辑
修正either404函数逻辑:解决同时存在相邻0对和4对时错误返回true的问题
问题背景
给定整数数组numbers,需要实现函数either404:
- 当数组仅存在相邻0对(
0,0)或相邻4对(4,4)其中一种情况时,返回true - 两种情况同时存在,或者都不存在时,返回
false
当前实现传入数组[0,0,3,6,4,4]时错误返回true,正确结果应为false,需要修正函数逻辑。
问题原因分析
原实现大概率只做了「存在0对 或 存在4对」的判断,没有排除两种情况同时存在的场景,导致符合“同时存在”的输入错误返回true。
修正后的代码实现
以JavaScript为例,修正后的函数如下:
function either404(numbers) { let hasZeroPair = false; let hasFourPair = false; for (let i = 1; i < numbers.length; i++) { const prev = numbers[i-1]; const curr = numbers[i]; if (prev === 0 && curr === 0) { hasZeroPair = true; } else if (prev === 4 && curr === 4) { hasFourPair = true; } // 提前终止:两个标记都为true时无需继续遍历 if (hasZeroPair && hasFourPair) { break; } } // 异或逻辑:仅当其中一种情况存在时返回true return hasZeroPair !== hasFourPair; }
逻辑说明
- 初始化两个布尔变量
hasZeroPair和hasFourPair,分别标记数组中是否存在相邻0对和相邻4对 - 遍历数组(从索引1开始),逐一检查当前元素与前一个元素的组合:
- 若为
0,0,将hasZeroPair设为true - 若为
4,4,将hasFourPair设为true - 当两个标记都变为
true时,可提前终止循环(已满足同时存在的条件,无需继续遍历)
- 若为
- 最后返回
hasZeroPair !== hasFourPair:- 只有其中一个标记为
true时,返回true(符合“仅存在一种”的要求) - 两个标记都为
true或都为false时,返回false
- 只有其中一个标记为
测试验证
- 输入
[0,0,3,6,4,4]→ 返回false(符合预期) - 输入
[0,0,3,6]→ 返回true(仅存在0对) - 输入
[3,4,4,6]→ 返回true(仅存在4对) - 输入
[1,2,3]→ 返回false(两种对都不存在) - 输入
[0,0,4,0,4,4]→ 返回false(同时存在两种对)
内容的提问来源于stack exchange,提问作者Seryozha Petrosyan
相关产品推荐
相关产品推荐

