给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
链接:https://leetcode-cn.com/problems/single-number

首先是异或的三个性质,0和自己做异或操作结果仍然是自己,异或满足交换律和结合律是本题关键。时间复杂度O(n),空间复杂度(1)
public int singleNumber1(int[] nums) { int single=0 ; for(int num:nums) { single = single ^ num; } return single; }
方法二哈希表:最容易想到的但是需要额外的空间
public int singleNumber(int[] nums) { Map<Integer,Integer> map = new HashMap<>(); for(int i : nums){ map.put(i,map.getOrDefault(i,0)+1); } for(Map.Entry<Integer,Integer> entry: map.entrySet()) { if(entry.getValue()==1 ) { return entry.getKey(); } } return -1 ; }

浙公网安备 33010602011771号