CCF计算机职业资格认证 2015年3月第2题 数字排序 解法和思路
第二行包括n个整数。相邻的整数之间用一个空格分隔,表示所给定的整数。
假设两个整数出现的次数一样多,则先输出值较小的。然后输出值较大的。
5 2 3 3 1 3 4 2 5 2 3 5
2 3
5 3
1 1
4 1
1 ≤ n ≤ 1000,给出的数都是不超过1000的非负整数。
思路:此题不算非常难,最难的点在相等的次数要以值最小的先输出,也就是先按字数降序排列,次数一致的再按整数升序排列,最后输出。
一開始是想着一个TreeMap解决,然后按V值排序。这样提交时。仅仅得70分,有case只是。后面想着还是再写一个类保存num和count吧。再实现comparator接口。
按规则排序就可以。
代码可能不是非常精简,如有更好的方法,能够跟帖说明。
代码例如以下:
package sds;
import java.util.*;
public class Main {
public static void main(String[] args){
//接受输入
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
//得到数组a
int[] a = new int[n];
for(int i = 0; i < n; i++){
a[i] = sc.nextInt();
}
//统计次数
Map<Integer,Integer> map = new HashMap<Integer, Integer>();
for(int i = 0; i < n; i++){
if(map.get(a[i]) == null){
map.put(a[i],1);
}else{
map.put(a[i],map.get(a[i]) + 1);
}
}
ValueComparator bvc = new ValueComparator();
List<NumCount> list = new ArrayList<NumCount>();
//加入到list
for(int key:map.keySet()){
NumCount count = new NumCount(key, map.get(key));
list.add(count);
}
Collections.sort(list, bvc);//排序
//打印
for(int i = 0; i < list.size();i++){
System.out.println(list.get(i).getNum() + " " + list.get(i).getCount());
}
}
}
//实现排序
class ValueComparator implements Comparator<NumCount> {
@Override
public int compare(NumCount o1, NumCount o2) {
if(o1.getCount() > o2.getCount())
return -1;//降序排列
if(o1.getCount() < o2.getCount())
return 1;
if(o1.getNum() > o2.getNum())
return 1;//假设次数同样。再按整数升序
if(o1.getNum() < o2.getNum())
return -1;
return 0;
}
}
//保存数字和次数
class NumCount{
private int num;
private int count;
public NumCount(int num,int count) {
this.num = num;
this.count = count;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
CCF计算机职业资格认证 2015年3月第2题 数字排序 解法和思路的更多相关文章
- CCF计算机职业资格认证考试题解
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF计算机职业资格认证考试题解 CCF计算机软件能力认证(简称CCF CSP认证)是CCF计算机职业资格认证系 ...
- CCF计算机职业资格认证考试 201809-2 买菜
以下内容过于幼稚,请大佬自觉绕道.. 题目描述: 时间限制:1.0s内存限制:256.0MB问题描述:问题描述 小H和小W来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁 ...
- CCF CSP 201503-2 数字排序
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201503-2 数字排序 问题描述 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到 ...
- 我的Python成长之路---第一天---Python基础(作业1:登录验证)---2015年12月26日(雾霾)
作业一:编写登录接口 输入用户名密码 认证成功系那是欢迎信息 输错三次后锁定 思路: 1.参考模型,这个作业我参考了linux的登录认证流程以及结合网上银行支付宝等锁定规则 1)认证流程参考的是Lin ...
- 2015年3月阿里内推(c++研发)实习生电面经历
2015年3月开学开始就听说阿里会有内推,果不其然在师兄的引荐下推了菜鸟网络,但是在学校的BBS上看到了阿里云部门,而且要会C++,这使我更感兴趣,重新选择了方向,当然最后选择了阿里云.在此分享一下三 ...
- TIOBE 2015年7月编程语言排行榜:C++的复兴
TIOBE 2015年7月编程语言排行榜:C++的复兴 发表于2015-07-13 17:03| 16086次阅读| 来源CSDN| 128 条评论| 作者钱曙光 编程语言排行榜TIOBEC++ 摘要 ...
- 2015年12月28日 Java基础系列(六)流
2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流
- 2015年12月13日 spring初级知识讲解(四)面向切面的Spring
2015年12月13日 具体内容待补充...
- 2015年8月18日,杨学明老师《技术部门的绩效管理提升(研讨会)》在中国科学院下属机构CNNIC成功举办!
2015年8月18日,杨学明老师为中国网络新闻办公室直属央企中国互联网络中心(CNNIC)提供了一天的<技术部门的绩效管理提升(研讨会)>培训课程.杨学明老师分别从研发绩效管理概述.研发绩 ...
随机推荐
- Java并发容器--ConcurrentLinkedQueue
概述 ConcurrentLinkedQueue是一种基于链表实现的无界非阻塞线程安全队列,遵循先入先出规则. 线程安全队列有两种实现方式: 阻塞方式:对入队和出队操作加锁.阻塞队列. 非阻塞方式:通 ...
- [LeetCode]Word Search 回溯
Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from l ...
- mogadm修改硬盘状态
#查看主机序列mogadm host list #查看空间快满的分区 df -h#检查硬盘序列和状态ls -l /data/mogile_data/ #查看mogadm目录下软链接的目录对应的分区 # ...
- Java遍历list集合的4种方法
list集合的遍历4种方法: package com.sort; import java.util.ArrayList; import java.util.Iterator; import java. ...
- 【原创】Win7 IE故障:APPCRASH,d3d9.dll,c0000005
问题 今天使用使用IE登录某网址,发现总是报错,如下图,无法浏览. 解决方案 主要讲IE的呈现方案修改即可,如下步骤: 在IE的[Internet选项]选择[高级]选项卡,在[加速的图形]中勾选[使用 ...
- javascript原型理解一种
http://www.jianshu.com/p/15ac7393bc1f 这个系列值得好好学习的.. // 声明构造函数 function Person(name, age) { this.name ...
- (1)OracleClient数据库操作(淘汰)
一.数据库连接 Oracle 数据提供程序,位于System.Data.OracleClient 命名空间.( .NET 4 以后的版本,会将不在维护和更新了) 第一步:引入命名空间 在程序的开头写上 ...
- Python的并发并行[4] -> 并发[0] -> 利用线程池启动线程
利用线程池启动线程 submit与map启动线程 利用两种方式分别启动线程,同时利用with上下文管理来对线程池进行控制 from concurrent.futures import ThreadPo ...
- [LOJ6281]数列分块入门 5
题目大意: 给你一个长度为$n(n\leq50000)$的序列$A(0\leq A_i<2^{31})$,支持进行以下两种操作: 1.将区间$[l,r]$中所有数开方: 2.询问区间$[l,r] ...
- 1.11(java学习笔记)封装
封装将内部细节封装起来,只暴露外部接口. 比如我们的电视就将复杂的内部线路用外壳封装起来,只留下外部按钮或遥控,用户只需要知道按钮或遥控的作用就可以,无需明白电视内部是如何工作. 而且封装也保障了安全 ...