本文共 1852 字,大约阅读时间需要 6 分钟。
JAVA算法:查找给定的数组中只出现了一次的数组元素
一个整形数组中,除了两个数字之外,其它数字都出现了两次。
写一个程序,求出只出现了一次的数字。 例如:数组元素为 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中就只会剩下只出现一次的那两个值。 * */ Mapmap = new HashMap (); 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 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
程序运行结果:
1st: 3 2nd: 5
1st: 1 2nd: 2附上:文件内容
2
10 4 2 8 3 4 5 8 7 7 2 6 3 3 2 1 4 4转载地址:http://zitdi.baihongyu.com/