首先由题已知:生成的数字都在1到1000以内。所以这里采用桶排序的思想,先生成一个a[1000]的数组,举例当我输入300时,我就让a[300]这个值加1,xdm在这里好好理解一下这个例子。
然后我用一个for循环从0到 N,输入哪个值就让对应数组的下标的值加1.
for(int i = 0; i < N;i++) {
int key = scanner.nextInt();
a[key]++;
}
然后再用一个for循环由1到1000,里面加个判定,那个数组下表的值大于零就代表之前输入有这个数,然后让sum累加,这一步也正好能起到去重的作用。
for(int i = 0;i < 1000;i++) {
if(a[i] != 0) {
sum++;
}
}
最后,再用一个for循环由1到1000,那个数组下表的值大于零就输出下表而不是a[i],
i代表了之前输入的是几,然后a[i]代表之前输入的这个数有几个重复
for(int i = 0;i < 1000;i++) {
if(a[i] != 0) {
System.out.print(i+ " ");
}
}
最后贴上完整代码。
import java.util.Scanner;
public class p1059 {
public static void main(String[] args) {
Scanner scanner =new Scanner(System.in);
int a[] = new int[1000];
int N = scanner.nextInt();
int sum = 0;
for(int i = 0; i < N;i++) {
int key = scanner.nextInt();
a[key]++;
}
for(int i = 0;i < 1000;i++) {
if(a[i] != 0) {
sum++;
}
}
System.out.println(sum);
for(int i = 0;i < 1000;i++) {
if(a[i] != 0) {
System.out.print(i+ " ");
}
}
}
}