随笔 - 11  文章 - 2  trackbacks - 0
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

新闻分类

link

搜索

  •  

最新评论

阅读排行榜

评论排行榜

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 阅读(213) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: