【问题标题】:how to delete repeated elements from a sorted array如何从已排序的数组中删除重复的元素
【发布时间】:2016-07-06 18:52:40
【问题描述】:

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

}

【问题讨论】:

  • 看起来是阅读/学习 java 集合的好点......
  • 使用设置数据类型而不是数组列表
  • 也许它不起作用,因为你的冒泡排序是错误的。您从a.length-3 开始向下,这意味着数组中的最后两项永远不会排序。

标签: java arrays algorithm bubble-sort superset


【解决方案1】:

您只需按如下方式更改您的删除 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。

【讨论】:

  • 我刚才运行了这段代码。这是我所做的唯一改变。对于输入 (1, 1, 1, 2 , 1, 3),它可以正常工作。你能再检查一下吗?输出应该是 1 2 3 吧?
  • 记住你应该从 for 循环中删除 i++
  • Mashregi 非常感谢您救命。像老板一样解决谢谢:)
猜你喜欢
  • 2021-10-01
  • 1970-01-01
  • 2013-04-28
  • 2018-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-20
相关资源
最近更新 更多