找出数组中任意重复的数字
思路:找出数组中的任意重复的数字,这里可以先将数组排序,然后就非常方便找出,而且这个方法不需要创建新的空间,空间复杂度为o(1)。但排序的时间复杂度是O(n*n),具体实现如下:
public class paixu {
public static void main(String[] args) {
int number;
System.out.println("请输入想要的数组长度");
number=input.inputnum();//自己封装的输入的类的输入整数的方法
int[] numbers=new int[number];
for(int i=0;i<numbers.length;i++)
{
numbers[i]=input.inputnum();
}
//冒泡排序
for(int j=0;j<numbers.length;j++)
{ for(int k=j;k<numbers.length-1;k++)
{
if(numbers[k]>numbers[k+1])
{
int temp=numbers[k];
numbers[k]=numbers[k+1];
numbers[k+1]=temp;
}
}
}
int flag=0;
for( int l=0;l<numbers.length-1;l++)
{if(numbers[l]==numbers[l+1]){
flag=1;
System.out.println(numbers[l]);
break;
}}
if(flag==0)
System.out.println("无任何重复的数字");
}封装的输入数字的类如下,可以抓到异常,然后重新让用户输入
public class input {
public static int inputnum(){
System.out.println("请输入一个数字");
int number=-1;
Scanner sc=new Scanner(System.in);
try{ number=sc.nextInt();
}
catch(Exception e){
System.out.println("格式错误,请输入数字");
number=inputnum();
}
return number;
}
}但上面的时间复杂度过高,会影响效率,所以我遍历一次数组,将数组中的数字存入Set中,当发现set里有此数时直接退出,这样的话时间复杂度最多为O(n),可以提高效率
public static void main(String[] args) {
int number;
System.out.println("请输入想要的数组长度");
number=input.inputnum();//自己封装的输入的类的输入整数的方法
int[] numbers=new int[number];
for(int i=0;i<numbers.length;i++)
{
numbers[i]=input.inputnum();
}
Set<Integer> set=new HashSet<Integer>();
boolean flag=true;
for(int i=0;i<numbers.length;i++)
{if(!set.contains(numbers[i]))
set.add(numbers[i]);
else{
System.out.println(numbers[i]);
flag=false;
break;
}
}
if(flag==true)
{
System.out.println("无重复数字");
}
}
海康威视公司氛围 916人发布