您的位置:首页 > 其它

LeetCode——Single Number

2017-07-21 19:26 246 查看
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?

给定一个整数数组,当中除一个外每一个元素都出现两次。找出那个。

说明:你的算法应该有线性的时间复杂性。你能够不用额外的内存来实现吗?

最直接的思路是使用哈希表来保存元素和出现的次数。

可是使用了新的空间。

public int singleNumber(int[] A) {
HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
for(int i=0;i<A.length;i++){
if(map.get(A[i]) != null)
map.put(A[i], map.get(A[i])+ 1);
else
map.put(A[i], 1);
}
for(Map.Entry<Integer,Integer> m : map.entrySet())
if(m.getValue() == 1)
return m.getKey();
return -1;
}


一种比較巧妙的办法是使用异或,由于同样的元素经过异或运算后就变成了0。

public int singleNumber(int[] A) {
int temp = 0;
for(int i=0;i<A.length;i++)
temp ^= A[i];
return temp;
}
比方:传入{2,2,4,3,3}。计算步骤例如以下:

temp = 0 A[0]=2

temp = 2

------------------

temp = 2 A[1]=2

temp = 0

------------------

temp = 0 A[2]=4

temp = 4

------------------

temp = 4 A[3]=3

temp = 7

------------------

temp = 7 A[4]=3

temp = 4
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: