题目描述:
解法1:
常规解法,使用HashMap解决。遍历数组,通过HashMap存储数组中的元素出现的次数,最后再遍历HashMap,发现出现次数为1的元素返回即可。
class Solution {
public int singleNumber(int[] nums) {
Map<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < nums.length; i++){
if(map.containsKey(nums[i])) map.put(nums[i], map.get(nums[i])+1);
else map.put(nums[i], 1);
}
for(Map.Entry<Integer, Integer> entry : map.entrySet()){
if(entry.getValue() == 1) return entry.getKey();
}
return -1;
}
}
解法2:
排序解法。首先对数组元素进行排序。然后遍历数组元素,如果数组元素和前后的元素都不一样,则证明它是目标元素,返回即可。但是这样可能会漏掉两种情况,一种是目标元素在数组第一位,一种是目标元素在数组最后一位,需要单独判断。
class Solution {
public int singleNumber(int[] nums) {
Arrays.sort(nums);
for(int i = 1; i < nums.length-1; i++){
if(nums[i] != nums[i-1] && nums[i] != nums[i+1]) return nums[i];
}
if(nums[0] != nums[1]) return nums[0];
return nums[nums.length-1];
}
}