前端JavaScript算法找出只出现一次的数字

作者:异步漫步

时间:2026-10-25

浏览:177

本文介绍如何在JavaScript中高效解决“只出现一次的数字”算法题。通过对比Map计数法与异或运算法,重点解析如何利用位运算特性在O(n)时间复杂度和O(1)空间复杂度下找出唯一元素,提供完整代码实现与原理说明。

文章目录

题目:只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

输入: [2,2,1] 输出: 1

示例 2:

输入: [4,1,2,1,2] 输出: 4

解:

首个思路是利用 map 数据结构求解,该方案时间复杂度为 O(n),符合线性要求,但空间复杂度为 O(n);下文方法二将阐述如何降低空间消耗。

解法一:用 map 来解:

/**
 * @param {number[]} nums
 * @return {number}
 */
var singleNumber = function(nums) {
   let map = new Map();
    for(let i = 0; i<nums.length;i++){
        if(map.has(nums[i])){
            map.set(nums[i],map.get(nums[i])+1);
        }else{
            map.set(nums[i],1)
        }
    }
    for(let [key,value] of map.entries()){
        if(value===1){
            return key
        }
    }

};

题目:只出现一次的数字

解法二:用 异或 解

核心在于理解如何做到:不使用额外空间来实现

即需在数组原数据进行操作,异或运算可达成此目标;

异或(eor)属逻辑运算。相同数值异或结果为0;不同数值异或结果为1;非零数与0异或等于其本身;

/**
 * @param {number[]} nums
 * @return {number}
 */
var singleNumber = function(nums) {
  for (var i = 1; i < nums.length; i++) {
    nums[0] = nums[0] ^ nums[i];    // 把所有的元素都异或到nums[0]上。
  }
  return nums[0];
};

题目:只出现一次的数字

以上为前端JavaScript算法找出只出现一次的数字的详细信息,更多JavaScript算法只出现一次数字的内容请查阅本站其他文章!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章