如何删除排序数组中重复的元素
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。
正如你在这里看到的,这是一个程序,它按升序对元素进行排序,并删除任何重复的元素。这里的问题是 '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。