问题描述:
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
**问题分析:**个人认为无论什么时候遇到数组问题都应首先考虑是否能够给数组排序,排序是为了更好地查找,对于大部分的数组问题都是可以先进性排序的。
(PS:老师说过,生活中的大部分事情都是要进行分类,分类的前提是先排序,按照顺序将元素或者称之为对象分开,然后在进行查找)。该题目可能有很多的快捷方法,由于技术差,第一次写的程序可能显得复杂,求指教。
import java.util.Arrays;
public class Solution {
public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
if(array.length<=1){
return;
}
//将数组排序,便于查找
Arrays.sort(array);
//设置一个标志,如果第一个数组num1放入数据就为1,第二个数组放入数据就为2
int flag=1;
//边界判断,第一个位置和最后一个位置
if(array[0]!=array[1]){
num1[0]=array[0];
flag=1;
}
if(array[array.length-1]!=array[array.length-2]){
num2[0]=array[array.length-1];
flag=2;
}
//遍历数组中间的位置,将查找出的数组放入num数组
for(int i=2;i<=array.length-2;){
if(flag==1&&array[i]!=array[i+1]){
num2[0]=array[i];
flag=2;
i++;
}else if(flag==2&&array[i]!=array[i+1]){
num1[0]=array[i];
flag=1;
i++;
}else{
i=i+2;
}
}
}
}