当前位置: 代码迷 >> 综合 >> 0011:数字统计 题意不符,坑了我一晚上
  详细解决方案

0011:数字统计 题意不符,坑了我一晚上

热度:34   发布时间:2024-01-15 07:37:59.0

0011:数字统计

  • 查看
  • 提交
  • 统计
  • 提问

总时间限制: 

1000ms

 

内存限制: 

100000kB

描述

输入n个整数,统计每个数出现的次数.

输入

第一行是一个整数n(1<=n<=1000),接下来n行每行一个整数.

输出

第一行输出总共有多少个不同的整数.
接下来每行输出一个整数及这个整数出现的次数,用空格分隔.
输出的整数的顺序与它们在输入中第一次出现的顺序一致(即在输入中先出现的数,也会在输出中先出现)

样例输入

5
2
3
2
1
2

样例输出

3
2 3
3 1
1 1

提示

这题注意啊,n可能要大于1005,这是对于这个我们训练的专题来说,真是,太坑人了。所以以后要动态的创建数组

普通代码:

import java.io.*;
import java.util.*;public class Main
{public static void main(String args[]) throws Exception{Scanner cin = new Scanner(System.in);int n = cin.nextInt();long[] a= new long [n];int[] vis= new int [n];long[] b= new long [n];long[] c= new long [n];for(int i=1;i<=n;i++){a[i] = cin.nextLong();vis[i]=0;}int k=0;for(int i=1;i<=n;i++){long sum=1;if(vis[i]==0){for(int j=i+1;j<=n;j++){if(a[i]==a[j]){sum++;vis[j]=1;}}k++;b[k]=sum;c[k]=a[i];}vis[i]=1;}System.out.println(k); for(int i=1;i<=k;i++){System.out.println(c[i]+" "+b[i]); }}}

Map实现:

import java.util.LinkedHashMap;
import java.util.Scanner;
import java.util.Set;public class Main {static LinkedHashMap<Integer,Integer> map1=new LinkedHashMap<Integer,Integer>();static void f(int key){if(map1.containsKey(key)){map1.put(key,map1.get(key)+1);}else{map1.put(key,1);}}public static void main(String[] args){Scanner sc=new Scanner(System.in);int m=sc.nextInt();for(int i=0;i<m;i++){f(sc.nextInt());}System.out.println(map1.size());Set<Integer> keyset=map1.keySet();for(Integer key:keyset){System.out.println(key+" "+map1.get(key));}