题目大意:给出一串数组,里面的数都是两个,只有一个数是一个,把这个只有一个的数找出来。时间复杂度最好是线性的,空间复杂度最好为O(1).
法一:利用map,空间换时间,代码如下(耗时26ms):
1 public int singleNumber(int[] nums) { 2 Map<Integer, Integer> map = new HashMap<Integer, Integer>(); 3 int res = -1; 4 for(int i = 0; i < nums.length; i++) { 5 if(map.get(nums[i]) != null && map.get(nums[i]) == 1) { 6 map.put(nums[i], 2); 7 } 8 else { 9 map.put(nums[i], 1); 10 } 11 } 12 for(int i = 0; i < nums.length; i++) { 13 if(map.get(nums[i]) == 1) { 14 res = nums[i]; 15 break; 16 } 17 } 18 return res; 19 }