问题描写叙述
  给定n个整数,请统计出每一个整数出现的次数。按出现次数从多到少的顺序输出。

输入格式
  输入的第一行包括一个整数n,表示给定数字的个数。

  第二行包括n个整数。相邻的整数之间用一个空格分隔,表示所给定的整数。
输出格式
  输出多行,每行包括两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。

假设两个整数出现的次数一样多,则先输出值较小的。然后输出值较大的。

例子输入
12

5 2 3 3 1 3 4 2 5 2 3 5
例子输出
3 4

2 3

5 3

1 1

4 1
评測用例规模与约定

  1 ≤ n ≤ 1000,给出的数都是不超过1000的非负整数。

思路:此题不算非常难,最难的点在相等的次数要以值最小的先输出,也就是先按字数降序排列,次数一致的再按整数升序排列,最后输出。

一開始是想着一个TreeMap解决,然后按V值排序。这样提交时。仅仅得70分,有case只是。后面想着还是再写一个类保存num和count吧。再实现comparator接口。

按规则排序就可以。

代码可能不是非常精简,如有更好的方法,能够跟帖说明。

代码例如以下:

  1. package sds;
  2.  
  3. import java.util.*;
  4.  
  5. public class Main {
  6. public static void main(String[] args){
  7. //接受输入
  8. Scanner sc = new Scanner(System.in);
  9. int n = sc.nextInt();
  10. //得到数组a
  11. int[] a = new int[n];
  12. for(int i = 0; i < n; i++){
  13. a[i] = sc.nextInt();
  14. }
  15. //统计次数
  16. Map<Integer,Integer> map = new HashMap<Integer, Integer>();
  17. for(int i = 0; i < n; i++){
  18. if(map.get(a[i]) == null){
  19. map.put(a[i],1);
  20. }else{
  21. map.put(a[i],map.get(a[i]) + 1);
  22. }
  23. }
  24. ValueComparator bvc = new ValueComparator();
  25. List<NumCount> list = new ArrayList<NumCount>();
  26. //加入到list
  27. for(int key:map.keySet()){
  28. NumCount count = new NumCount(key, map.get(key));
  29. list.add(count);
  30. }
  31. Collections.sort(list, bvc);//排序
  32. //打印
  33. for(int i = 0; i < list.size();i++){
  34. System.out.println(list.get(i).getNum() + " " + list.get(i).getCount());
  35. }
  36. }
  37. }
  38.  
  39. //实现排序
  40. class ValueComparator implements Comparator<NumCount> {
  41.  
  42. @Override
  43. public int compare(NumCount o1, NumCount o2) {
  44. if(o1.getCount() > o2.getCount())
  45. return -1;//降序排列
  46. if(o1.getCount() < o2.getCount())
  47. return 1;
  48. if(o1.getNum() > o2.getNum())
  49. return 1;//假设次数同样。再按整数升序
  50. if(o1.getNum() < o2.getNum())
  51. return -1;
  52. return 0;
  53. }
  54. }
  55. //保存数字和次数
  56. class NumCount{
  57. private int num;
  58. private int count;
  59.  
  60. public NumCount(int num,int count) {
  61. this.num = num;
  62. this.count = count;
  63. }
  64.  
  65. public int getNum() {
  66. return num;
  67. }
  68.  
  69. public void setNum(int num) {
  70. this.num = num;
  71. }
  72.  
  73. public int getCount() {
  74. return count;
  75. }
  76.  
  77. public void setCount(int count) {
  78. this.count = count;
  79. }
  80.  
  81. }

CCF计算机职业资格认证 2015年3月第2题 数字排序 解法和思路的更多相关文章

  1. CCF计算机职业资格认证考试题解

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF计算机职业资格认证考试题解 CCF计算机软件能力认证(简称CCF CSP认证)是CCF计算机职业资格认证系 ...

  2. CCF计算机职业资格认证考试 201809-2 买菜

    以下内容过于幼稚,请大佬自觉绕道.. 题目描述: 时间限制:1.0s内存限制:256.0MB问题描述:问题描述 小H和小W来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁 ...

  3. CCF CSP 201503-2 数字排序

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201503-2 数字排序 问题描述 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到 ...

  4. 我的Python成长之路---第一天---Python基础(作业1:登录验证)---2015年12月26日(雾霾)

    作业一:编写登录接口 输入用户名密码 认证成功系那是欢迎信息 输错三次后锁定 思路: 1.参考模型,这个作业我参考了linux的登录认证流程以及结合网上银行支付宝等锁定规则 1)认证流程参考的是Lin ...

  5. 2015年3月阿里内推(c++研发)实习生电面经历

    2015年3月开学开始就听说阿里会有内推,果不其然在师兄的引荐下推了菜鸟网络,但是在学校的BBS上看到了阿里云部门,而且要会C++,这使我更感兴趣,重新选择了方向,当然最后选择了阿里云.在此分享一下三 ...

  6. TIOBE 2015年7月编程语言排行榜:C++的复兴

    TIOBE 2015年7月编程语言排行榜:C++的复兴 发表于2015-07-13 17:03| 16086次阅读| 来源CSDN| 128 条评论| 作者钱曙光 编程语言排行榜TIOBEC++ 摘要 ...

  7. 2015年12月28日 Java基础系列(六)流

    2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流

  8. 2015年12月13日 spring初级知识讲解(四)面向切面的Spring

    2015年12月13日 具体内容待补充...

  9. 2015年8月18日,杨学明老师《技术部门的绩效管理提升(研讨会)》在中国科学院下属机构CNNIC成功举办!

    2015年8月18日,杨学明老师为中国网络新闻办公室直属央企中国互联网络中心(CNNIC)提供了一天的<技术部门的绩效管理提升(研讨会)>培训课程.杨学明老师分别从研发绩效管理概述.研发绩 ...

随机推荐

  1. xmlhelper类

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Xm ...

  2. python3使用urllib获取set-cookies

    #!/usr/bin/env python # encoding: utf-8 import urllib.request from collections import defaultdict re ...

  3. Error:Execution failed for task ':app:transformClassesWithDexForDebug'. > com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.Exec

    Error:Execution failed for task ':app:transformClassesWithDexForDebug'.> com.android.build.api.tr ...

  4. mogilefsd同步速度调优

    #查看主从mogadm settings list #一点点调试mogadm settings listmogadm settings set internal_queue_limit 500moga ...

  5. HTML5初学笔记

    今天学习了下HTML5的基本知识,用画笔在画布上画了几个东西,效果如图,相关代码如下,注意点总结在末尾: <!DOCTYPE html> <html> <head> ...

  6. linux的文件布局

    /bin---权限为 rwxr-xr-x 所有者为root/root 用户bin最先进入的工作目录就是这里.这里放置的是执行目录,但是特殊在这里的命令可以被一般用户使用(root更能使用).例如 ca ...

  7. 使用sqlplus执行sql时,发现有中文有乱码解决方法

    https://blog.csdn.net/fyyinjing/article/details/77877239

  8. ACM中的正则表达式

    layout: post title: ACM中的正则表达式 author: "luowentaoaa" catalog: true mathjax: true tags: - 正 ...

  9. POJ 1769 Minimizing maximizer(DP+zkw线段树)

    [题目链接] http://poj.org/problem?id=1769 [题目大意] 给出一些排序器,能够将区间li到ri进行排序,排序器按一定顺序摆放 问在排序器顺序不变的情况下,一定能够将最大 ...

  10. SQL表操作习题4 14~25题 缺20题