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<BigInteger,Integer> map=new LinkedHashMap<BigInteger, Integer>();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<Map.Entry<BigInteger,Integer>> list = new ArrayList<Map.Entry<BigInteger,Integer>>(map.entrySet());Collections.sort(list,new Comparator<Map.Entry<BigInteger, Integer>>(){//降序排序public int compare(Entry<BigInteger,Integer> o1,Entry<BigInteger ,Integer> o2) {return o2.getValue()-o1.getValue();}});if(map.size()==1){System.out.print("no");}else{for(Map.Entry<BigInteger, Integer> mapping:list) {System.out.print(mapping.getKey());break;}}}}