You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript查找数组出现奇数次整数的代码运行错误求解决

问题分析
  • 核心逻辑错误:题目要求返回出现次数为奇数的整数本身,你的代码错误将该整数的出现次数赋值给返回变量,而非整数本身。
  • 逻辑与命名、日志不匹配:判定条件为次数为奇数的分支,却将结果存入evenOccurence变量,日志也错误将奇数次数描述为偶数,还误打印了整个次数数组而非当前项的次数。
  • 循环变量未声明:for (i of A)中的i未加声明关键字,会泄漏为全局变量,严格模式下直接报错。
  • 属性类型问题:普通对象的属性名会自动转为字符串,最终取出的结果需要转回数字类型,才符合题目返回整数的要求。
修复后代码
function findOdd(A) {
    const isOdd = (x) => x % 2 !== 0;
    const counts = {};
    // 声明循环变量
    for (const i of A) {
        counts[i] = counts[i] ? counts[i] + 1 : 1;
    }
  
    const numOccurences = Object.values(counts);
    const occurences = Object.getOwnPropertyNames(counts);
    let target;
  
    for (let y = 0; y < numOccurences.length; y++) {
        if (isOdd(numOccurences[y])) {
            // 取对应的整数并转回数字类型
            target = Number(occurences[y]);
            console.log(`值 ${occurences[y]} 出现 ${numOccurences[y]} 次,为奇数`);
        }
    }
    return target;
}
// 测试用例输出7,符合预期
console.log(findOdd([7,7,8,8,7,5,5,5,5,5,5,5]));
更优解法

利用位运算异或的特性:相同数字异或结果为0,0异或任意数字等于该数字本身。由于题目保证仅有一个数出现奇数次,其余均为偶数次,遍历一次数组异或所有元素即可得到结果,空间复杂度为O(1),效率更高:

function findOdd(A) {
  return A.reduce((prev, curr) => prev ^ curr, 0);
}

内容的提问来源于stack exchange,提问作者ZamMnyusi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:06:05