找出数组中任意重复的数字

思路:找出数组中的任意重复的数字,这里可以先将数组排序,然后就非常方便找出,而且这个方法不需要创建新的空间,空间复杂度为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("无重复数字");
        }

    }
全部评论

相关推荐

11-11 14:21
西京学院 C++
无敌混子大王:首先一点,不管学校层次怎么样,教育经历放在第一页靠上位置,第一页看不到教育经历,hr基本直接扔掉了
点赞 评论 收藏
分享
11-03 14:38
重庆大学 Java
AAA求offer教程:我手都抬起来了又揣裤兜了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务