To my CSDN

只出现一次的数字

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

说明:

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

示例 1:

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

示例 2:

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

来源:力扣(LeetCode)只出现一次的数字
链接:https://leetcode-cn.com/explore/interview/card/top-interview-quesitons-in-2018/261/before-you-start/1106/

 

思路:根据异或运算的特点,相同的数字经过异或运算后结果为0,除单独出现一次的数字外,其他数字都是出现两次的,那么这些数字经过异或运算后结果一定是0。而任何数字与0进行异或运算都是该数字本身。所以对数组所有元素进行异或运算,运算结果就是题目的答案。 

int singleNumber(int nums[],int len) 
{
	int num = 0;
	for (int i = 0; i < len; i++) 
	{
		 num = num ^ nums[i];
	}
	return num;
}

 分析:arr[5] = {1,2,3,2,1};

1:0000 0001                异或,同假异真
2:0000 0010                num= 1^2=3   0000 0011
3:0000 0011                num= 3^3=0   0000 0000
2:0000 0010                num= 0^2=2   0000 0010 
1:0000 0001                num= 2^1=3   0000 0011

参考博客:只出现一次的数字 [ LeetCode ]

posted @ 2019-10-02 17:01  我叫RT  阅读(96)  评论(0编辑  收藏  举报