open judge 求序列中的众数 大数类+LinkedHashMap(统计+按value降序排序)

15:求序列中的众数

  • 查看
  • 提交
  • 统计
  • 提问

总时间限制: 

1000ms

 

内存限制: 

65536kB

描述

输入一个长度为N的整数序列 (不多于128个整数),每个整数的范围在[-1052,1052],计算这个序列的众数。 

众数是指出现次数最多的那个数。 

如果有多个数出现的次数都达到最多,则取在原序列最先出现的数为众数;如果所有的数都相等,则返回"no"。

输入

第一行为序列长度N。

然后是N个数,每一个数的范围都是在[-10^52,10^52]。 注意,这N个数之间可能有若干个空行隔开。

注意,输入数据可能有一些冗余表达信息,具体来说:

1) 正数和0前面可能有前导0和'+'符号,例如
+000123=123
+0000=0
-0000=0
2)每个数字中不含有空格和其他非数字字符,例如不会出现"100 0"或者"- 100"。
3)每个数字前面至多有一个符号,即不会出现+(-1)、-(+4)和-(-1)等情况。

输出

输出只有 1 行:

该序列的众数或者”no”。

如果有多个数出现的次数都达到最多,则取最先出现的数为众数,并且输出形式应该最简形式。

例如,如果原序列众数为+000123,则输出123;如果原序列众数为+0000或者-0000或者0000,输出0。

负数正常输出,例如:如果原序列众数为-000000001111,就输出-1111。

样例输入

6
-00001
10000
00011111111111111111111111111111111111
-01
+000000011111111111111111111111111111111111
-00000000000001

样例输出

-1

 

算法分析:

直接大数类+treemap

 

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Map;




public class Main {
	
	public static void main(String args[])
	{
	
     Scanner cin = new Scanner(System.in);
      LinkedHashMap map=new LinkedHashMap();
      int n=cin.nextInt();
     
      for(int i=1;i<=n;i++)
      {
    	  BigInteger b=cin.nextBigInteger();
    	 // System.out.print(b);
    	  if(map.get(b)==null)
    	  {
    		  map.put(b, 1);
    	  }
    	  else
    	  {
    		  map.put(b, map.get(b)+1);
    	  }
      }
      
      List> list = new ArrayList>(map.entrySet());
	   Collections.sort(list,new Comparator>(){
		   //降序排序
		   public int compare(Entry o1,Entry o2) {
			   return o2.getValue()-o1.getValue();
		   }
	   });
	 
	   if(map.size()==1)
	   {
		   System.out.print("no");
	   }
	   else
	   {
		   for(Map.Entry mapping:list) {
		    System.out.print(mapping.getKey());
		    break;
		   }
	   }

	}

}

 

你可能感兴趣的:(java,java大数)