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

/** 题目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 );      }         }   }
相关文章
相关标签/搜索