日期:2014-05-20  浏览次数:20699 次

关于数组的一道算法题
请教个位高手:我想输出一个数组中有重复的数,但采用下面这种方法会多输出一个0,请问一下是不是应使用动态数组?应怎样使用?还是算法有问题?在此先多谢各位前辈了!
                                    int[]   a=new   int[]{1,2,3,1,2,4,9,2,9,23,12,45,12};
int[]   b=new   int[20];
int   i,j;


System.out.print( "\n "+ "数组a中重复的数为: ");
for(i=0;i <a.length;i++)
{
for(j=0;j <a.length;j++)
{
if(i!=j&&a[i]==a[j])
{
b[i]=a[i];
}
}
}
for(i=0;i <b.length;i++)
{
for(j=0;j <b.length;j++)
{
if(i!=j&&b[i]==b[j])
{
b[j]=100;
}
}
}
for(int   k=0;k <a.length;k++)
{
if(b[k]!=100)
System.out.print(b[k]+ "   ");
}

------解决方案--------------------
你的方法挺奇怪。如果你的那些数都是非负的话,看下面这个吧。
---------------------------------
public class ArrayTest {
public static void main(String[] args) {
int[] a=new int[]{1,2,3,1,2,4,9,2,9,23,12,45,12,13,13};
int[] b=new int[20];

for (int i=0; i <a.length; i++) {
if (a[i] <0) continue;
boolean duplicate = false;
for (int j=i+1; j <a.length; j++) {
if (a[i] == a[j]) {
a[j] = -1;
duplicate = true;
}
}
if (!duplicate)
a[i] = -1;
}

for (int i=0; i <a.length; i++) {
if (a[i] <0) continue;
System.out.print(a[i] + " ");
}
System.out.println();
}
}
------------------------------------