标签:
问题描述:
Given an array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
问题分析:要求采用线性时间复杂度,并且最好不使用多余的空间。
一、位操作
异或运算,只有当两个bit不同时,返回1。如果两个数是相同的,异或运算将会返回0。
nums中只含有一个single number,因此,采用异或运算,最后得到的就是所求的single number。
public int singleNumber(int[] nums){
int single = 0;
for(int i = 0; i < nums.length; i ++)
single = single ^ nums[i];
return single;
}
二、hashset
相比于hashtable,hashmap存储的是key-value键值对,hashset直接操作对象,且不允许存储重复元素。
public int singleNumber(int[] nums){
HashSet<Integer> set = new HashSet<Integer>();
for(int i = 0; i < nums.length; i ++)
if(!set.add(nums[i])) //若添加存在重复
set.remove(nums[i]); //删除重复元素
Iterator<Integer> iterator = set.iterator(); //迭代器,遍历set
return iterator.next();
}
标签:
原文地址:http://www.cnblogs.com/mydesky2012/p/5032136.html