260. 只出现一次的数字 III

  • ​​题目描述​​
  • ​​解题思路​​
  • ​​代码实现​​

题目描述

【LeetCode】第20天 - 260. 只出现一次的数字 III_代码实现

解题思路

法一、直接比较(代码实现注释部分)
先对数组元素进行排序,然后遍历数组剔除重复元素。

法二、哈希表(代码实现)

  • 使用一个哈希映射统计数组中每一个元素出现的次数。(key为nums[i],value为出现的次数)
  • 对哈希映射进行遍历,将所有只出现了一次的数放入答案中。

代码实现

class Solution {
public int[] singleNumber(int[] nums) {
// int[] result = new int[2];
// Arrays.sort(nums);
// int count = 0;
// if(nums[0] != nums[1]){ //判断第一个元素是否重复
// result[count] = nums[0];
// ++count;
// }
// if(nums[nums.length-1] != nums[nums.length-2]){
// result[count] = nums[nums.length-1]; /判断最后一个元素是否重复
// ++count;
// }

// for(int i=1;i<nums.length;i++){
// if(count == 2){
// break;
// }
// if(nums[i]!=nums[i-1] && nums[i]!=nums[i+1]){ //判断中间位置元素是否重复
// result[count] = nums[i];
// ++count;
// }
// }
// return result;

int[] result = new int[2];
int count = 0;
HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
for(int i=0;i<nums.length;i++){
//getOrDefault(Object key, V defaultValue)方法是Map接口下的一个方法。
//作用:当 Map 集合中有这个 key 时,就使用这个 key 值;如果没有就使用默认值 defaultValue
map.put(nums[i],map.getOrDefault(nums[i],0)+1); //遍历数组统计没得数字出现的次数
}
for(Map.Entry<Integer,Integer> entry : map.entrySet()){
if(entry.getValue() == 1){ //获取只出现一次的元素
result[count++] = entry.getKey();
}
if(count == 2){
break;
}
}
return result;
}
}