題目描述: java
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? app
解答 code
方法一:採用XOR(異或)方式解答。異或的基本知識你們能夠自行查詢。在此舉例如2^2=0,2^1=3,2^0=2。其先轉爲二進制按位異或後轉爲10進製表示。故對於一個數列1 2 2 3 3,使用異或可得 1^2^2^3^3 = 1 排序
public class Solution { public int singleNumber(int[] A) { int result = A[0]; for(int i=1;i<A.length;i++){ result = result^A[i]; } return result; } }
/** * 方法名稱:singleNumber() * 方法描述:採用排序方式解答 * @param * @return String * @Exception */ public int singleNumberSort(int[] A){ if(A.length == 1){ return A[0]; } //按照升序排列 Arrays.sort(A); //排序以後,相同的數字成對存在 如 1,2,2,3,3;2,2,3,4,4;故此設定遞增步長爲2 for(int i=0;i<A.length-1;i+=2){ if(A[i] != A[i+1]){ return A[i]; } } return A[A.length-1]; }
public int singleNumber(int[] A) { HashMap<Integer, Integer> map = new HashMap<>(); for(int i=0;i<A.length;i++){ int value = 0; if(map.containsKey(A[i])){ map.remove(A[i]); }else{ map.put(A[i], value+1); } } return map.entrySet().iterator().next().getKey(); }