给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1] 输出: 1示例 2:
输入: [4,1,2,1,2] 输出: 4 / 思路: 这题我的解法是运用哈希映射来解题 , 假若给定的整数数组中的元素 都和另外一个数组中的元素有一个映射关系,比如:给定集合A中的元素a,b,c,d,e,分别对于集合B中的1,2,3,4,5. 即有A=f(B) ,那我只需要遍历一遍A,就可以把所有的关系知道。
例如这题:意思就是数组A中除了某个元素只和B映射一次,其余每个元素映射了两次。
// class Solution { public int singleNumber(int[] nums) { int[] a = new int[100000] ; //映射范围 (-49999,50000) //num[]中大于等于0的部分对应于a[0]-a[50000],小于0的部分对应a[50001]-a[99999] for(int i =0;i<nums.length ;i++) { if(nums[i]< 0) { nums[i] +=100000 ; } a[nums[i]]++ ; } int re = 0 ; for(int j = 0;j<a.length ;j++) { if(a[j]==1) { re = j ; break ; } } if(re>50000) re -=100000; return re ; } }