题目描述
某次科研调查时得到了 nn 个自然数,每个数均不超过 1.5 \leq 10^91.5≤109。已知不相同的数不超过 10^4104个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
输入描述
第 1 行是整数 nn,表示自然数的个数。
第 2 ~ nn+1行每行一个自然数。
其中,1 \leq n \leq 2 \times 10^5,每个数均不超过 1.5 \leq 10^91≤n≤2×105,每个数均不超过1.5≤109。
输出描述
输出 mm 行( mm 为 nn 个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。
输入输出样例
示例 1
输入
8
2
4
2
4
5
100
2
100
输出
2 3
4 2
5 1
100 2
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
解法01
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = scan.nextInt();
}
Arrays.sort(arr);
int sum;
int num;
for (int i = 0; i < n; ) {
sum = 0;
num = arr[i];
do{
sum++;
i++;
}while(i!=n&&num == arr[i]);
System.out.println(num+" "+sum);
}
scan.close();
}
解法02
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = scan.nextInt();
}
Arrays.sort(arr);
int sum;
int num;
for (int i = 0; i < n; ) {
sum = 0;
num = arr[i];
do{
sum++;
i++;
}while(i!=n&&num == arr[i]);
System.out.println(num+" "+sum);
}
scan.close();
}
解法03
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = scan.nextInt();
}
Arrays.sort(arr);
int sum;
int num;
for (int i = 0; i < n; ) {
sum = 0;
num = arr[i];
do{
sum++;
i++;
}while(i!=n&&num == arr[i]);
System.out.println(num+" "+sum);
}
scan.close();
}