262 字
1 分钟
算法之只出现一次的数字

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

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

image-20210613163443078

解法:

1.哈希表

简单不接受,需要开辟新空间

2.逻辑运算符

/**
* @param {number[]} nums
* @return {number}
*/
var singleNumber = function (nums) {
for (let i = 0, l = nums.length; i < l; i++) {
nums[i + 1] = nums[i] ^ nums[i + 1];
}
return nums[nums.length - 1];
};

思路:

逻辑 或非 运算符的特点就是,某个数或非本事就是 0,0或非任意数都是任意数

再不开辟新空间的情况下,根据数组特点我们知道,除了那个一次出现的数据,其他都是成双的

那我们把相邻两数 或非 运算的结果赋值给下一个,不断的或非下去,最终得到的最后一位数,就是出现一次的数

算法之只出现一次的数字
https://nollieleo.github.io/posts/算法之只出现一次的数字/
作者
翁先森
发布于
2021-06-13
许可协议
CC BY-NC-SA 4.0