题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
思路解析
直接用一个hashmap来存储值和出现次数,然后再次遍历即可得到结果。注意的是,这里需要将结果分别存入num1,num2两个数组里面。因此需要设置一个量来进行区分它们,让顺序执行的代码在一个循环体内分两次装入。
代码
import java.util.HashMap;
//num1,num2分别为长度为1的数组。传出参数
//将num1[0],num2[0]设置为返回结果
public class Solution {
public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
//先将其排序
if(array==null||array.length==0) return;
HashMap<Integer,Integer> map = new HashMap<>();
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 flag = 0;//用于将num1和num2的添加数的操作分开
for(int i = 0;i<array.length;i++){
if(map.get(array[i])==1){
if(flag==0){
num1[0] = array[i];
flag++;
}
else{
num2[0] = array[i];
}
}
}
}
}
这里为什么不用再if后面进行i++使得直接跳过那个已经存入num1的数呢?因为要是i是最后一个元素,在这里i++就出现了越界。