题目描述:

解法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];
}
}

本文介绍了两种在数组中寻找唯一出现一次元素的算法:使用HashMap存储元素出现次数的常规解法,以及对数组排序后查找目标元素的排序解法。文章详细解释了每种方法的实现过程。
1181

被折叠的 条评论
为什么被折叠?



