给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1] 输出: 1
示例 2:
输入: [4,1,2,1,2] 输出: 4
我的思路:先将数组进行排序,再进行遍历,每一次都判断当前元素与前后元素是否相同,都不相同则代表是唯一,注意第一个与最后一个单独处理。(虽然通过了,但这个思路是不符合说明的第一点,所以效率很低)
正确思路应该是使用【按位异或:从二进制的角度出发,相同为0,不同为1,任何数与0异或都将返回原来的数,与本身进行异或将返回0】根据这种特点,题目中说明重复元素只会重复两次,所以遍历,每一位元素都进行异或,相同元素会“变为0”,不产生效果(与本身进行异或将返回0),只有唯一的元素会产生效果。做法:定义一个变量tmp为0,遍历数组,逐个元素与tmp按位异或,最后得到的tmp就是唯一元素的值。
网友评论