只出现一次数字
题目
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
链接:https://leetcode-cn.com/problems/single-number
思路
利用异或运算
源代码(C#)
public class Solution
{
public int SingleNumber(int[] nums)
{
int a = nums[0];
for (int i=1;i<nums.Length;i++)
{
a = a ^ nums [i];
}
return a;
}
}
运行结果

异或运算法则
- a ⊕ a = 0
- a ⊕ b = b ⊕ a
- a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c;
- d = a ⊕ b ⊕ c 可以推出 a = d ⊕ b ⊕ c.
- a ⊕ b ⊕ a = b.
- 若x是二进制数0101,y是二进制数1011;
则x⊕y=1110
只有在两个比较的位不同时其结果是1,否则结果为0
即"两个输入相同时为0,不同则为1"!
本文介绍了一个非空整数数组中找到唯一出现一次的数字的算法,该算法利用异或运算实现线性时间复杂度,适用于不使用额外空间的情况。通过具体的示例和C#代码展示了解决方案。

被折叠的 条评论
为什么被折叠?



