题目描述
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。
-
示例 1:
输入: [2,2,1]
输出: 1 -
示例 2:
输入: [4,1,2,1,2]
输出: 4
你可以不使用额外空间来实现吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/single-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
思路一:使用额外空间,利用ArrayList。遍历数组,如果ArrayList中没有此元素则加入进数组里,如果存在则删掉。最后返回ArrayList元素的第0个。
思路二:(官方解法杀疯了)。异或思路:
异或满足交换律和结合律,因此如果把数组中的元素从头异或到尾,使用交换律把相同的两个元素凑到一起,再使用结合律加入括号,相同元素异或结果为0,0与任何元素异或结果为该元素。该判断方法充分利用重复的元素只有2个(偶数个即可)的条件,秒啊。
代码详解
思路一
ArrayList
class Solution {
public int singleNumber(int[] nums