文章目录
# 数组中只出现一次的数字
## 题目描述
一个整形数组里除了两个数字之外,其他两个数字都出现了两次。请写出程序找出这两个只出现一次的数字
##解题思路1暴力解法
- 对数组进行排序
- 遍历数组,将array[i]分别于rray[i-1]和array[i+1]作比较,若都不相同。则找到只出现一次的值(为什么要比较相邻的两个数?因为题目规定了只有两个数字只出现了一次)
- 注意处理首尾两个边界情况(一旦排序以后,首尾两个数字就只需要和前一个/后一个数字相比较了)
//num1,num2分别为长度为1的数组。传出参数
//将num1[0],num2[0]设置为返回结果
import java.util.ArrayList;
import java.util.Arrays;
public class Solution{
public void FindNumsAppearOnce(int [] array,int num1[],int num2[]){
Arraylist<Integer> arr=new Arraylist<Integer>();
Arrays.sort(array);
for(int i=0;i<array.length;i++){
if(i==0&&array[i]!=array[i+1]){
arr.add(array[i]);
}else if(i==arr.length-1&&array[i]!=array[i-1])
{ arr.add(array[i]);
}
else{
if(i!=0&&i!=array.length-1;&&array[i]!=array[i-1]&&array[i]!=array[i+1])
{arr.add(array[i]);}
}
}
num1[0]=arr[0];
num2[0]=arr[1];
}
}
##解题思路2暴力解法
- 遍历当前数组,使用ArrayList记录当前只出现了一次的值
- 若当前遍历的值,在ArrayList中已经出现,则移除该值,继续遍历
- 最后剩下的两个值,即为所求
import java.util.ArrayList;
public class Solution{
public void FindNumsAppearOnce(int [] array,int num1[],int num2[]){
ArrayList<Integer> arr=new ArrayList<Integer>();
for(int i=0;i<array.length;i++){
if(!arr.contains(array[i]))
{ arr.add(array[i]);
}
else
arr.remove(new Integer(array[i]));
}
if(arr.size()>1)
{
num1[0]=arr.get(0);
num2[0]=arr.get(1);
}
}
}