PAT 乙级 1028 人口普查 Java 解决

PAT 乙级 Java 合集 PAT乙级合集 阅读详情

写在最前:欢迎批评,欢迎任意地方的指正,用你们的优秀的java代码砸死我吧!!

问题——————

某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。

这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。

输入格式:

输入在第一行给出正整数 N,取值在(0,10​^5​​];随后 N 行,每行给出 1 个人的姓名(由不超过 5 个英文字母组成的字符串)、以及按 yyyy/mm/dd(即年/月/日)格式给出的生日。题目保证最年长和最年轻的人没有并列。

输出格式:

在一行中顺序输出有效生日的个数、最年长人和最年轻人的姓名,其间以空格分隔。

输入样例:

5
John 2001/05/12
Tom 1814/09/06
Ann 2121/01/30
James 1814/09/05
Steve 1967/11/20

输出样例:

3 Tom John

解题思路:

讲道理,我觉得我这个是全网最快的java解决这道题的解法了,(不相信的话看一下思路和代码,你会同意的)但是还是无法通过 最后一个检查点,出于好奇就使用了网上通过的c++的代码去试了一下,发现平常检查点2到3ms解决的问题到了最后一个点要50+ms,不禁陷入沉思,这让Java怎么活?Java正常检查点就得70+ms左右。

不抱怨了,既然选择了Java就要一条路走下去,来看思路:题目说处理生日和人名,日期是特定格式的字符串,然后有两个关键边界点 2014/09/06 和 1814/09/06 ,对于这两个日期来说,题目描述的并不是很清楚开闭区间,但是根据给出的样例暂且得出结论,两个日期的生日都是有效的,必须大于或小于才是无效。从这里开始,正常思路是对日期进行比对是否有效然后存入一个集合中,进行排序或者别的方法遍历得到最大最小值。但是可以换个思路来想,日期比对我看网上有分成数字比对的,有格式化成日期(Date)对象比对的,但是还没有发现直接使用String进行比对的,这种东西直接通过String比对是可以的,String默认比较方法是每个字符的ascii码值,对于日期来说,一定符合:a字符串小于b字符串那么a日期一定小于b日期,即a比b老,根据这个结论,直接进行字符串比对,不需要任何的变换。然后就是存储的方式,刚开始想得方法是使用Map集合存储,然后进行值排序(吧map变成entry的list,然后新建比较器对每个元素的值进行比较),后来看到了题目中的“题目保证最年长和最年轻的人没有并列”  ,那就好说了,把日期这个字符串当成map中的键,并且不怕有元素覆盖,本身题目只需要最大和最小的,而最大最小的又不怕覆盖,所以顺理成章地直接使用treeMap进行存储,根据treemap的自动排序存储,转化成entry的list直接输出第一个元素和最后一个元素的值,即名字,并且输出每次判断是否有效时累加的一个计数值即可。但是,依旧无法通过最后一个检查点。。

希望大佬写出来Java的ac代码让小弟我看看,感激不尽

package not.die.in.here;

import java.io.*;
import java.util.*;
import java.util.Map.Entry;

public class _1028_PeopleCheck{
	public static boolean isValid(String birthday) {
		if(birthday.compareTo("1814/09/06") <= -1 || birthday.compareTo("2014/09/06")  >= 1)//新建一个判断日期是否有效的函数,这两个日期是有效的
			return false;
		return true;
	}
	
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));//buffer加快读取速度
		int n = Integer.parseInt(bf.readLine());//读取人数
		String[] buf = null;
		String[] buf2 = new String[n];
		Map<String,String> man = new TreeMap<>(); //存放人的数据
		int count = 0;
		for(int i=0;i<n;i++) {
			buf2[i] = bf.readLine();//不打断数据读取会不会更快一些呢...
		}
		bf.close();
		for(int i=0;i<n;i++) {
			buf = buf2[i].split(" ");
			if(isValid(buf[1])) {//如果有效就计数并且添加进map,吧生日当成是键
				count++;
				man.put(buf[1],buf[0]);
			}
		}
		List<Entry<String,String>> entry = new ArrayList<Entry<String, String>>(man.entrySet());//转化成list便于直接输出第一项和最后一项
		if(entry.size()>0)//如果有效生日个数大于0输出结果
			System.out.println(count+" "
										+entry.get(0).getValue()+" "
										+entry.get(entry.size()-1).getValue());
		else {//没有有效的生日则直接输出0
			System.out.println(0);
		}
	}
}

提交截图:

PAT乙级【Java题解合集】 学习完本专栏后,leetcode的简单题应该是没啥问题了,可以去做甲级的题目或者leetcode中等以上难度的题目继续修炼,后续博主会整理并更新算法修炼专栏,欢迎您的订阅!👉🏻算法修炼专栏👈🏻。 阅读详情

相关推荐

PAT 乙级真题——1028 人口普查 (20 分)

PAT 乙级真题——1028 人口普查 (20 分)

Portia356的博客 1050

PAT (Basic Level) 1028 人口普查 (20分)JAVA解法

输入样例: 5 John 2001/05/12 Tom 1814/09/06 Ann 2121/01/30 James 1814/09/05 Steve 1967/11/20 输出样例: 3 Tom John import java.io.BufferedReader; import java.io.InputStreamReader; import java.text.DateForm...

qq_44028719的博客 421

PAT 乙级真题题解 java实现

虽然这次PAT考试的成绩并不算理想,但还是有了很多收获,特别是认识了一些很优秀的人以及他们平时怎么学习算法。 我参加的2019年冬季PAT乙级考试,这个时间PAT官网上的乙级真题有95道,我是使用java来做的(推荐使用c语言)。大部分题都是通过的,部分题目超出时间限制, 还有一部分只通过了部分用例。 以下是题目清单及我的通过情况: GitHub仓库 完全正确 1001 害死人不偿命的(3n...

wangbo818的博客 1788

Java 1028 人口普查

import java.util.LinkedList;import java.util.List;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int num = sc.nextInt();String[] str3 = new String[num];Integer[] date = new Integer[nu

2401_84010744的博客 790

PAT乙级-题解(Java)

我的题解放在github仓库了(喜欢的话,记得star哈) 下面是汇总导航,如果你只想看其中某个题的话,点击题解直达。 乙级的题目每个题都是一个有趣的故事,引导你去思考解决问题的能力,不是单纯的刷题。然后只涉及数组,循环,判断,字符串等基础编程语言语法的知识,不会设计复杂的算法与数据结构。 一开始可能会有点吃力,正常,但是如果你全部刷完,leetcode上部分简单题对你来说是小case了。 甲级主要是算法与数据结构,乙级刷完了,也可刷甲级, 甲级的题目特别好,测试用例丰富 如果是急需找工作,面试的话刷lee

weixin_45685225的博客 1894

【Java】PAT乙级真题全记录(二)21到40题

1021 个位数统计 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String num = sc.nextLine(); int[] count = new int[10]; ...

qq_40624532的博客 1846

1028 人口普查(JAVA)

1028 人口普查(JAVA)

小羊不会飞的博客 468

禾赛XT16 vs XT32激光雷达实测对比:选16线还是32线?看完这篇不纠结

本文深度评测禾赛XT16与XT32激光雷达的性能差异与应用选择。通过实测数据对比,分析16线与32线激光雷达在点云密度、动态场景适应性及与IMU协同工作等方面的表现,帮助用户根据自动驾驶、机器人等不同应用场景做出最优选型决策。

table的专栏 944

pat乙级1028

人口普查(20) 某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过200岁的老人,而今天是2014年9月6日,所以超过200岁的生日和未出生的生日都是不合理的,应该被过滤掉。 输入格式: 输入在第一行给出正整数N,取值在(0, 10^5];随后N行,每行给出1个人的姓名(由不超过5个

m0_37285185的博客 293

STM32外部中断与事件机制深度解析:从硬件触发到软件响应

本文深入解析STM32外部中断与事件机制,从硬件触发到软件响应的完整流程。通过对比中断和事件的应用场景、响应速度及配置方法,帮助开发者优化嵌入式系统设计,特别适合需要低功耗或高实时性的项目。

weixin_29175469的博客 408

S32K144(14)ADC

1、简介 开发板S32K144+S32DS+JLINK,裸机版的程序编写 S32K14x包含两个12位ADC模块,ADC0和ADC1 应用程序可能需要ADC的连续采样(4K采样/秒),这可能对CPU有相当大的负载。虽然使用可编程延迟块(PDB)来触发ADC可能会减少一些CPU负载,但当ADC以非常高的速率采样或PDB被绕过时,ADC支持DMA请求功能以获得更高的性能。ADC可以在转换完成时触发DMA(通过DMA请求)。TRGMUX会根据不同的应用需求,使用软件为用户提供更灵活的DMA触发方案,例如,可

朗朗上口就行啦的博客 1万+

PAT 1028 人口普查 (20分)(Java)

题目描述   某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。   这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。 输入格式:   输入在第一行给出正整数 N,取值在(0,10的5次方];随后 N 行,每行...

HenryLei的博客 2万+

当迁移学习遇见室内定位:基于UJIIndoorLoc的跨场景适配实践

本文探讨了迁移学习在跨建筑室内定位中的应用,重点解析了UJIIndoorLoc数据集的特性及其在解决设备差异和环境变化中的关键作用。通过特征工程、迁移学习策略和小样本微调技术,显著提升了定位模型的跨场景适配能力,为实际部署提供了有效解决方案。

weixin_29038155的博客 394

PAT乙级——Java合集

简介添加链接描述   刷PAT完全是闲的时候打发时间的,感觉还蛮有意思,有空了就写几道,基本都是Java实现的,目前为止才刷了五十多道题目,等刷完继续LeetCode,这里也会持续更新的。 合集 PAT 1001 害死人不偿命的(3n+1)猜想(15分) PAT 1002 写出这个数 (20分)(Java) PAT 1003 我要通过! (20分)(Java) PAT 1004 成绩排名 (20 分)(Java实现) PAT 1005 继续(3n+1)猜想 (25分)(Java)

HenryLei的博客 6万+

uniCloud云存储进阶:七牛云扩展存储从开通、绑定域名到批量上传的完整实战

本文详细介绍了uniCloud云存储进阶实践,重点讲解如何通过七牛云扩展存储实现从开通、绑定域名到批量上传的完整流程。内容涵盖成本优势分析、域名备案方案、SSL证书配置、多文件并发上传控制等实战技巧,并提供可直接复用的代码示例,帮助开发者高效构建内容社区类应用。

weixin_26985923的博客 468

聚焦112Gb/s SerDes芯片的AN/LT端口自协商和链路学习,评估验证高速链路的信号质量并分析调优(400/800G高速以太网互联接口,AI加速卡网络RDMA性能测试,交换背板接口性能评估)

在112G SerDes高速通道下的400G/800G高速以太网端口下,如何保障通信速率,验证SerDes的数据完整性和链路余量,自动协商(AN)和链路训练(LT)功能显得尤其重要,其在DAC、ACC、AEC铜缆连接或高速背板通信上,自动协商(AN)和链路训练(LT)的工作与否将决定高速链路传输质量的优劣。本文将系统的讨论介绍自动协商(AN)和链路训练(LT)的测试流程,其可以独立使用,也可以与teledynelecroy SierraNet M1288配合使用。

专注有线以太网性能测试--丹麦信雅纳网络(Xena Networks) 9402

【JAVA】PAT 乙级 1028 人口普查(样例4超时,牛客网通过)

【JAVA】PAT 乙级 1028 人口普查(样例4超时,牛客网通过) 题目链接 牛客网题目链接 某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。 这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。 输入格式:...

TAL_DARIM的博客 258

【深度学习新浪潮】算力行业的核心技术有哪些?

算力行业核心技术是芯片+互联+存储+调度+能效+软件的全栈协同:芯片提供算力、互联打通集群、存储保障数据、调度提升效率、能效支撑规模、软件释放算力。当前AI大模型推动算力从“单机”走向“万卡级超节点集群”,技术竞争从单一芯片升级为系统级、全栈化的综合能力。

专注:太空算力、AI infra、异构调度、大模型成本工程 338

PAT乙级 1028 人口普查 (JAVA)

1028人口普查(20分) 某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。 这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。 输入格式: 输入在第一行给出正整数N,取值在(0,10​5​​];...

涩。 257

【Zephyr存储专题】09_LittleFs文件系统操作

本文档旨在为开发者介绍Zephyr下Littlef's文件系统相关配置使用指南

zero的博客 3246

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

PAT乙级1028

题目链接 https://pintia.cn/problem-sets/994805260223102976/problems/994805293282607104 题解 这题跟那个德才论(PAT乙级1015)什么的差不多。 因为我用了string和algorithm,所以整个代码实现比较简单。 值得注意的的是,刚开始第3个测试点没过,报错Segmentation fault。 网上查题...

weixin_30258901的博客 126

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

PAT 乙级B 1028 人口普查 (20分) JAVA版

1028人口普查(20分) 某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。 这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。 输入格式: 输入在第一行给出正整数N,取值在(0,10​5​​];随后N行,每行给出 1 个人的姓名(由不超过 5 个英文字母组成的字符串)、以及按yyyy/mm/dd(即...

rosemaryyoudu的博客 460

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

1028 人口普查(PAT乙级)

题目描述: 某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。 这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。 输入格式: 输入在第一行给出正整数 N,取值在(0,10​5​​];随后 N 行,每行给出 1 ...

闭关修炼 129

PAT 乙级 1028 人口普查 [字符串比较]

问题内容 某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。 这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。 输入格式: 输入在第一行给出正整数 N,取值在(0,10^​5​​ ];随后 N 行,每行给出 1...

qq_41970098的博客 223

1028 人口普查 PAT 乙级 java

1028 人口普查 PAT 乙级 java 1028 人口普查 PAT 201028 人口普查 PAT 乙级 java代码 1028 人口普查 (20 分) 某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。 这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁...

qq_39935165的博客 227
上一篇: PAT 乙级 1027 打印沙漏 Java 解决
下一篇: PAT 乙级 1029 旧键盘 Java 解决
TimothyHTY
博客等级 码龄9年 16粉丝 44原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值