0011:数字统计 题意不符,坑了我一晚上
原创
©著作权归作者所有:来自51CTO博客作者mb5f5b1df7f1e34的原创作品,请联系作者获取转载授权,否则将追究法律责任
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));
}