如何在 JavaScript 数组中找到只出现奇数次的整数?


给定一个整数数组,已知所有元素都出现偶数次,只有一个元素出现奇数次。我们的任务是在单次迭代中找到该元素。

这是一个示例数组:

[1, 4, 3, 4, 2, 3, 2, 7, 8, 8, 9, 7, 9]

在尝试解决这个问题之前,我们需要了解一点关于按位异或 (^) 运算符的知识。

异或运算符如果两个操作数互补则返回 TRUE,如果两个操作数相同则返回 FALSE。

异或 (^) 运算符的真值表:

0 ^ 0 → 0
0 ^ 1 → 1
1 ^ 0 → 1
1 ^ 1 → 0

如果仔细观察这种行为,我们会注意到,当对完全相同的值使用异或运算符时(例如,12^12),它总是返回 FALSE 或 0,换句话说,它可以用来否定出现偶数次的数值。而这正是我们想要的。

因此,在下面的代码中编写相同的内容:

示例

const sampleArray = [1, 4, 3, 4, 2, 3, 2, 7, 8, 8, 9, 7, 9];
console.log(sampleArray.reduce((a, b) => a ^ b));

它迭代每个元素,并不断否定出现偶数次的元素,最终返回只出现奇数次的元素。

输出

控制台输出将是:

1

更新于:2020年8月18日

125 次浏览

启动您的职业生涯

完成课程获得认证

开始
广告