如何从已排序的数组中删除重复的元素

时间:2016-07-06 18:52:40

标签: java arrays algorithm bubble-sort superset

正如您在这里看到的,这是一个按升序对元素进行排序并删除任何重复元素的程序。这里的问题是'删除'代码段。它适用于5个元素的数组,其中值(1,3,3,5,5)以任何顺序排列,因为'sort'代码段负责处理。但是,如果你采用序列说(1,1,1,2,1,3),删除不会完全发生。有人可以告诉我哪里出错了吗?

import java.util.*;

class Random 
{ 

 static int count=2;
public static void main(String[] args)          
{

        Scanner sc=new Scanner(System.in);
        System.out.println("How many elements are in your set?");// gets your elements
        int input=sc.nextInt();

        int Subsets=No_of_subsets(input);
        // to accept elements
        int arr[]=new int[input+2];
        accept(arr);
        //to sort and delete repeated elements

        sortanddelete(arr);
        System.out.println("Array a=");
        for(int i=0;i<arr.length-count;i++)
        {
            System.out.println(arr[i]);
        }
  System.out.println("Count"+count);
}
public static int No_of_subsets(int a )
{
    double ab=Math.pow(2, a);
    int ans=(int)ab;
    System.out.println("Your superset will have "+ans+" subsets");
    return (int)ans;
}

public static int[] accept(int a[])
{
    Scanner sc=new Scanner(System.in);
    System.out.println("Enter your array elements");
    for(int i=0;i<a.length-2;i++){
        a[i]=sc.nextInt();
    }
    return a;
}

public static int[] sortanddelete(int a[])
{
    int temp;
    for(int i=a.length-3;i>0;i--){
        for(int j=0;j<i;j++){
            if(a[j]>a[j+1]){
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
        }
    }



    for(int i=0;i<a.length-count;i++){
        if(a[i]==a[i+1]){
            for(int j=i;j<a.length-count;j++){
            a[j]=a[j+1];
        }
        count++;
    }
    }


    return a;
}

}

1 个答案:

答案 0 :(得分:0)

您只需按如下方式更改delete for循环:

for(int i=0;i<a.length-count;){
        if(a[i]==a[i+1]){
            for(int j=i;j<a.length-count;j++){
               a[j]=a[j+1];
            }
            count++;
        }
        else{
            i++;
        }
 }

因为如果你总是做i ++(即使所有元素都被移动了),那么你会错过一些重复。实际上,当完成转换时,就像我已经增加了一样。所以,当if没有发生时,你只需要增加i。

相关问题