题目描述: 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?
分析:找出给定的一串整数中只出现一次的数字
解题思路:1保证线性的时间复杂度,A^A=0,通过不断的异或,最后得到的数就是只出现一次的那个数字。
public static int singleNumber(int[] A,int n){
int result = 0;
for(int i=0;i<n;i++){
result^=A[i];
}
return result;
}
解题思路2:将数组中元素和出现的次数以map的形式存放,通过遍历得到只出现一次的那个数字。
public int singleNumber(int[] nums) {
//将数字与出现的次数按照哈希键值对的形式保存
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
int result=0;
for(int n:nums){
if(!map.containsKey(n)){
map.put(n,1);
}else{
map.put(n, map.get(n)+1);
}
}
//查找hashMap中value出现次数为1的数字(key)
for(Map.Entry<Integer,Integer> entry:map.entrySet()){
if(entry.getValue()==1){
result=entry.getKey();
break;
}
}
return result;
}