这个题目的主要思想是:(1)将currnum(当前的数字)记为数组的第一个数,currcount(当前数字的次数,不表示该数字实际出现的次数)。(2)从第二个数字开始,如果这个数字等于当前的数字(currnum),则将currcount加1,如果不等于则将currcount减1,如果currcount小于或等于0,则将当前的数字赋给currnum并将currcount置为1。(3)数组遍历完成之后currnum记录的就是出现次数超过一半的数字。
C++代码:
#include<stdio.h>
const int N=999999+1;
int arr[N];
int main(){
int n;//freopen("1.txt","r",stdin);
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++)
scanf("%d",&arr[i]);
int currnum=arr[0],currcount=1;
for(int i=1;i<n;i++){
if(arr[i]!=currnum){
currcount--;
if(currcount<=0){
currnum=arr[i];
currcount=1;
}
}
else{
currcount++;
}
}
printf("%d\n",currnum);
}
return 0;
}