给出一个整数序列(个数小于等于1000000),求:其中重复出现次数最多的整数,以及其出现的次数。
输入格式:
一个整数序列
输出格式:
两个整数,中间有一个空格隔开。
第一个整数:重复出现次数最多的整数;
第二个整数:第一个整数的出现次数。
输入示例:
2 3 4 8 5 3 6 9 1 2 6 3 7 3
输出示例:
3 4
提示:
如果重复出现次数最多的整数有并列几个,那么请输出其中值最小的整数。
注意算法的时间效率和空间效率。
#include<iostream>
using namespace std;
//下面为排序的函数
//******************************************//
void swap(int arr[],int i,int j){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
int partition(int arr[],int i,int j,int pivot){
do{
while(arr[++i]<pivot);
while(j!=0&&arr[--j]>pivot);
swap(arr,i,j);
}while(i<j);
swap(arr,i,j);
return i;
}
int quicksort(int A[],int i,int j){
if(j<=i)return true;
int index=(i+j)/2;
swap(A,index,j);
int k=partition(A,i-1,j,A[j]);
swap(A,k,j);
quicksort(A,i,k-1);
quicksort(A,k+1,j);
return true;
}
//******************************************//
//在main函数内开1000000的数组可能会溢出
int number[1000000];
int main(){
int max_time=0;
int max_number;
int count=0;
int value;
while(cin>>value){
number[count++]=value;
}
quicksort(number,0,count-1);
for(int i=0;i<count;){
int j;
int num=0;
int flag=0;
for(j=i;j<count;j++){
if(number[i]==number[j])num++;
else {flag=1;break;}
}
if(flag==1)i=j;
else i++;
if(num>max_time){max_time=num;max_number=number[i-1];}
}
cout<<max_number<<" "<<max_time<<endl;
}