给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 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 ;
}
}