您的位置:首页 > 其它

【简单题-指针数组】CCF 201312-1 出现次数最多的数

2018-03-13 16:00 267 查看
                      CCF 201312-1 出现次数最多的数                                            
问题描述  给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。输入格式  输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。
  输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。输出格式  输出这n个次数中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。样例输入6
10 1 10 20 30 20样例输出10
题意】   求一个数组中出现次数最多的数,最小的哪一个。 【类型】
  简单循环
 【分析】
  使用指针数组p记录每个数出现的次数,与这道题极其类似->点击打开链接    【注意】  之前提交了N遍,用C++用指针数组的方式,提交了都得0分,原因是p数组没有初始化啊!!!G++他就让你很闹心!  需要添加这样一行:于是就100分了,可是Java并不需要初始化,提交依然100分呢。
   memset(p,0, sizeof(p));
 【时间复杂度&&优化】
  O(n)

 【100分C++代码】
  
#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>

using namespace std;
int main() {
int a[10005];
int p[10005];
int n;
int x;
cin>>n;
memset(p,0, sizeof(p));
for(int i=0;i<n;i++){
cin>>a[i];
x=a[i];
p[x]++;//统计每个数值出现的次数
}
int maxp=-1;//最大的出现次数
int maxp_index=0;//最大的的出现次数对应的数值
for(int i=0;i<10005;i++){
if(p[i]>maxp){//如果出现次数和他相等的数,不会更新
maxp=p[i];
maxp_index=i;
}
}
cout<<maxp_index;
return 0;
}


【100分Java代码】
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
new Main().run();
}
public void run(){
Scanner sc = new Scanner(System.in);
int N =sc.nextInt();
int[]count=new int[10001];
for(int i=0;i<N;i++){
++count[sc.nextInt()];
}
int maxcount =-1;
int result=0;
for(int i=0;i<10000;i++){
if(count[i]>maxcount){
maxcount=count[i];
result=i;
}
}
System.out.println(result);
sc.close();
}
}
因为不甘心,于是C++把指针数组换成了map,得了100分
【100分C++代码--采用map】
#include <iostream>
#include <cstdio>
#include <map>

using namespace std;
int main() {
int a[10005];
map<int,int>p;
int n;
int x;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
x=a[i];
p[x]++;//统计每个数值出现的次数
}
int maxp=-1;//最大的出现次数
int maxp_index=0;//最大的的出现次数对应的数值
for(map<int,int>::iterator it=p.begin();it!=p.end();it++){
if(it->second>maxp){
maxp=it->second;
maxp_index=it->first;
}
}
cout<<maxp_index;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: