1、题目描述
一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
数据范围:数组长度 2\le n \le 10002≤n≤1000,数组中每个数的大小 0 < val \le 10000000<val≤1000000
要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)
2、算法分析
首先题目中要求的是两个只出现一次的数字,输出时按非降序输出,也就是正序输出。
首先对数组进行排序。
使用Map函数,注意,实现类是LinkedHashMap是有序的。
key存储的是数组中的值,value存储的是这个数值出现的次数。
遍历,最后判断value为1的,然后存储到大小为2的数组中。
3、代码实现
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param array int整型一维数组
* @return int整型一维数组
*/
public int[] FindNumsAppearOnce (int[] array) {
Map<Integer,Integer> map = new LinkedHashMap<>();
Arrays.sort(array);
// 求出现次数
for(int i=0;i<array.length;i++){
if(map.containsKey(array[i])){
map.put(array[i],2);
}else{
map.put(array[i],1);
}
}
int[] r = new int[2];
int j = 0;
// 将出现为1 的value对应的key存储到数组中。
for(int a : map.keySet()){
if(map.get(a) == 1){
r[j] = a;
j++;
}
}
return r;
}
}