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.
給出一個整型數組,其中除了一個元素之外,其他元素均出現兩次,要求找出這個只出現一次的元素。
題目要求使用線性的時間複雜度。
解題思路:
若使用暴力解決的方法,使用兩個循環,針對每個元素遍歷整個數組的其他元素,判斷是否有相同的元素,若沒有相同的元素,則返回當前元素。這種方法的時間複雜度爲O(N^2),顯然不符合要求。
第二種方法,使用空間換時間的思想,使用一個哈希表遍歷一次整個數組來存儲數組各個元素出現的個數,隨後再遍歷一次,若當前元素在哈希表中的Value值爲1,則返回當前元素。這種方法的時間複雜度爲O(n),符合要求。
代碼如下:
public class Solution {
public int singleNumber(int[] nums) {
Map<String, Integer> map = new HashMap<String, Integer>();
int length = nums.length;
for(int i=0; i<length; i++){
String numstr = nums[i] + "";
if(map.get(numstr) !=null && map.get(numstr) == 1){
map.put(numstr, 2);
}else{
map.put(numstr, 1);
}
}
for(int i=0; i<length; i++){
String numstr = nums[i] + "";
if(map.get(numstr) == 1){
return nums[i];
}
}
return -1;
}
}