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

JavaScript数组找唯一数:异或解法是否为最优方案?求更优思路

关于异或查找数组唯一数的JS实现优化分析

嘿,这个问题问得很到位!咱们先拆解下你的实现,再聊聊优化方向~

首先得明确:用异或运算查找数组中唯一出现一次的元素(其余元素出现两次)的思路本身就是最优方案——它的时间复杂度是O(n)(必须遍历所有元素一次,没法再快了),空间复杂度是O(1)(只用常数级额外空间),这已经是理论上的最优边界了。

不过你的代码还有可以简化和优化的地方,咱们来看看:

你的代码可以优化的点

  • 多余的if判断:你单独处理了i===0的情况,但异或运算有个性质是0 ^ x = x,完全可以直接初始化结果为0,然后统一遍历所有元素进行异或,没必要拆分逻辑。
  • 修改原数组:你直接修改了输入数组的nums[0],这会带来不必要的副作用(污染原数组),用单独的变量存储结果会更合理。
  • 变量声明:使用var会有变量提升的问题,现代JS更推荐用let/const来声明变量。

优化后的代码

var singleNumber = function(nums) {
    let result = 0;
    for (const num of nums) {
        result ^= num;
    }
    return result;
};

优化点说明

  • 用let声明result,避免var的变量提升问题;用const声明循环里的num,符合变量不可变的场景。
  • 用for...of循环替代传统的索引循环,代码更简洁易读,不用手动维护索引i。
  • 去掉了多余的分支判断,逻辑更紧凑,同时不修改原数组,避免副作用。
  • 本质逻辑和你的代码完全一致,都是利用异或运算a ^ a = 0、a ^ 0 = a的性质,把所有元素异或后,重复的元素会抵消为0,最终剩下的就是唯一的那个数。

总结一下:你的核心思路是完全正确且最优的,只是代码可以写得更简洁、更符合现代JS规范~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:46:37