leetcode-136. 只出现一次的数字解法
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
对于这样一个问题,我们可以使用一种小技巧,既用异或来解题。
首先我们要了解异或的几个性质
1.两个数异或是,二进制位相同取0.不相同取1。
例如:5 和9
5:0101
9:1001
5^9:1100
2.0异或任何数得到的都是那个数
3.任何数异或自己得到的都是0
例如上面的示例,我们可以让所有数据互相异或,因为除了某个元素外其余均出现两次,而相同的数字异或得到的为0,0再异或那个只出现一次的数既得到它本身。
如对于示例2
4 ^ 1 ^ 2 ^ 1 ^ 2 = 4 ^ 0 ^ 0 = 4
所以解法如下:
int singleNumber(int* nums, int numsSize){int num = 0,i;for(i=0; i
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
