LeetCode——Single Number
阿新 • • 發佈:2017-07-21
i++ entry 思路 etc 給定 size cep ret entryset
A[3]=3
temp = 7
------------------
temp = 7 A[4]=3
temp = 4
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
temp = 7
------------------
temp = 7 A[4]=3
temp = 4
LeetCode——Single Number