/** 题目java
* 在一个长度为n的数组里的全部数字都在0到n-1的范围内。数组
* 数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每一个数字重复了几回。dom
* 请找出数组中任意一个重复的数字。例如,若是输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或者3。索引
*/rem
/**思路:class
*一、让用户输入指定数组长度,而后准备数组数据(不考虑用户输入数据非法的状况)import
*二、经过set去重数组,而后两个数组想减,就得出一个只包含重复数字的数组;(注意这个数组里依旧可能存在数据重复状况,因此须要继续去重)随机数
*三、输出List
*/im
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 ); } } }