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

how to delete repeated elements from a sorted array

正如你在这里看到的,这是一个程序,它按升序对元素进行排序,并删除任何重复的元素。这里的问题是 'delete' 片段。它适用于 5 个元素的数组,其中值 (1,3,3,5,5) 的顺序是任意的,因为 'sort' 片段会处理这个问题。但是,如果您采用序列 say(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;
}

}

你只需要改变你的 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++(即使所有元素都被移动),那么你会错过一些重复。实际上,当完成移位时,就像 i 已经增加了一样。所以,你只需要在 if 没有发生时增加 i。