import java.util.Scanner;
import java.io.*;
public class hd1029 {
/**
* @param args
*/
public static void main(String[] args) throws IOException{
// TODO 自动生成方法存根
/*Scanner s = new Scanner(System.in);
while( s.hasNextInt())
{
int num = s.nextInt();
int Dm = s.nextInt(),Cm = 1;
for(int i=1; i<num; i++) {
int curNum = s.nextInt();
if(Dm == curNum) {
Cm++;
} else {
Cm--;
if(Cm < 0) {
Dm = curNum;
Cm = 1;
}
}
}
System.out.println(Dm);
}*/
StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
int num,curNum, Dm, Cm,i;
while(in.nextToken() != StreamTokenizer.TT_EOF)
{
num = (int)in.nval; //当前组的输入数的个数
in.nextToken();
Dm = (int)in.nval;Cm = 1; //Dm上个出现次数最多的数,Cm为当前输入最多的数与其它数的差
for(i=1; i<num; i++) {
in.nextToken();
curNum = (int)in.nval; //curNum为当前输入的数
if(Dm == curNum) { //如果Dm==curNum,则Cm++
Cm++;
} else {
Cm--; //如果Dm!=curNum,则Cm--
if(Cm < 0) { //如果出现Cm<0,则将Dm=curNum,赋新值,重新开始计数
Dm = curNum; //本题中至少有一个数的出现(N+1)/2次
Cm = 1; //故Cm>=1,Dm就是出现次数最多的数
}
}
}
System.out.println(Dm);
}
}
}
//*********************************************************程序***********************************************************
本题看似简单,只是在一组输入数中找出出现出现次数最多的元素,但要注意内存使用的控制,其中主要用到一个技巧:至少有一个数的出现(N+1)/2次,所以(出现次数最多的数的次数-其它数出现次数的总和>=1).
另外,本题在使用JAVA编写时,用Scanner类输入时还是出现内存不足,故用StreamTokenizer 类.
posted on 2008-06-10 01:00
poower 阅读(212)
评论(0) 编辑 收藏