01——找出数组中重复的数字

/** 题目

*  在一个长度为n的数组里的所有数字都在0到n-1的范围内。

*  数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。

*  请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或者3。

*/

/**思路:

*1、让用户输入指定数组长度,然后准备数组数据(不考虑用户输入数据非法的情况)

*2、通过set去重数组,然后两个数组想减,就得出一个只包含重复数字的数组;(注意这个数组里依旧可能存在数据重复情况,所以需要继续去重)

*3、输出

*/

import java.util.*;
public class Demo {
public static void main ( String[] args ) {

 //------------------------------------------前期准备工作-------------------------------------------------------

//输入数组的长度;
Scanner sc =new Scanner(System.in);
System.out.print("请输入取值范围(0~n):"+"\t");
int n = sc.nextInt ( );

//题目要求的数组
ArrayList<Integer> arr =new ArrayList<> ( );
//去重数组
HashSet< Integer > mset = new HashSet<> ( );

Random ran=new Random ( );
//随机n次,产生n个数,存入数组中
for ( int i = 0; i <n ; i++ ) {
//产生一个0~n-1之间的随机数,存入数组
int j = ran.nextInt ( n );
arr.add (j);
mset.add ( j );
}
System.out.println("------------------------[ 原始数据 ]------------------------");
System.out.println ("随机数组值为:"+arr);
System.out.println ("去重参考值为:"+mset);

 //------------------------------------------数据操作-------------------------------------------------------

//这时候,得到了一个符合题目要求的数组;和一个没有重复的set集合
if(arr.size ()<=0 ||arr==null){
System.out.println ("无效数组!" );
}
if(arr.size ()==mset.size ()){
System.out.println ("数组中无重复数字!" );
}else{
//有重复数字,重复的数组为:arr数组减去无重复数组mset
for ( Integer integer : mset ) {
//得到该数字再arr数组中第一次的索引,删除
int i = arr.indexOf ( integer );
arr.remove ( i );
}

//再去重
HashSet< Integer >list = new HashSet<> ( );
for ( Integer i : arr ) {
list.add ( i );
}
//重复数字为:
System.out.println ("重复的值为 : "+list );
}

}

}

猜你喜欢

转载自www.cnblogs.com/eiyuan/p/11250342.html