JZ56 数组中只出现一次的两个数字
题目
一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
思路
算法实现
既然有两个数字只出现了一次,我们就统计每个数字的出现次数,利用哈希表的快速根据key值访问其频率值。
具体做法:
step 1:遍历数组,用哈希表统计每个数字出现的频率。
step 2:然后再遍历一次数组,对比哈希表,找到出现频率为1的两个数字。
step 3:最后整理次序输出。
代码
package mid.JZ56数组中只出现一次的两个数字;
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param array int整型一维数组
* @return int整型一维数组
*/
public int[] FindNumsAppearOnce (int[] array) {
// write code here
if(array.length == 0) return new int[0];
HashMap<Integer, Integer> map = new HashMap<>();
int[] result = new int[2];
for (int value : array) {
if (!map.containsKey(value)) {
map.put(value, 1);
} else {
map.put(value, map.get(value) + 1);
}
}
int index = 0;
for (Integer key: map.keySet()) {
if (map.get(key) == 1) {
result[index] = key;
index++;
}
if (index == 2) break;
}
Arrays.sort(result);
return result;
}
public static void main(String[] args) {
int[] ints = new Solution().FindNumsAppearOnce(new int[]{1, 4, 1, 6});
System.out.println(Arrays.toString(ints));
}
}