您的位置:首页 > 编程语言 > Java开发

JAVA代码—算法基础:找出整形数组中只出现过1次的两个元素

2018-02-01 23:02 549 查看

找出整形数组中只出现过1次的两个元素

一个整形数组中,除了两个数字之外,其它数字都出现了两次。

写一个程序,求出只出现了一次的数字。

例如:数组元素为 4,2,8,3,4,5,8,7,7,2

上述数组中元素3和元素5只出现了一次。

package com.bean.algorithmexec;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class FindOnlyOneElementDemo {

/*
* 一个整形数组中,除了两个数字之外,其它数字都出现了两次。
* 写一个程序,求出只出现了一次的数字。
*
* 例如:数组元素为 4,2,8,3,4,5,8,7,7,2
* 上述数组中元素3和元素5只出现了一次。
* */

static int T=0;

/*
* 方法名称:findNumsAppearOnce
* num1,num2分别为长度为1的数组。传出参数
* 将num1[0],num2[0]设置为返回结果
*
* */
public static void findNumsAppearOnce(int [] array,int num1[] , int num2[]) {
//如果array数组长度为0或者数组为空,则直接返回
if(array == null || array.length == 0)
return;

/*
* 用一个map来装没有出现过的数,如果map中已经有这个数了,就说明这个数是第2次出现了,
* 所以把这个数从map中remove掉,这样遍历一遍后map中就只会剩下只出现一次的那两个值。
* */
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
int len = array.length;
for(int i = 0; i < len; i++){
if(map.containsKey(array[i])){
map.remove(array[i]);
}else{
map.put(array[i],1);
}
}
Set<Integer> keys = map.keySet();
int index = 0;
for(Integer key :keys){
if(index == 0){
num1[0] = key;
index++;
}else{
num2[0] = key;
}
}
}

public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub

System.setIn(new FileInputStream("G:\\findonlyoneelement.txt"));
Scanner sc = new Scanner(System.in);

int Answer=0;

//读取测试用例组数
T=sc.nextInt();
for(int i=0;i<T;i++) {
//读取数组元素个数
int length=sc.nextInt();
//声明数组
int[] numbers=new int[length];
for(int m=0;m<length;m++) {
//读取整形数组元素
numbers[m]=sc.nextInt();
//System.out.print(numbers[m]+"\t");
}

//System.out.println();

int[] num1=new int[1];
int[] num2=new int[1];

findNumsAppearOnce(numbers,num1,num2);

System.out.println("1st: "+num1[0]+"\t2nd: "+num2[0]);

}

}

}


(完)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐