电话聊天狂人(java)
7-14 电话聊天狂人(25 分)
给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人。
输入格式:
输入首先给出正整数N(≤105),为通话记录条数。随后N行,每行给出一条通话记录。简单起见,这里只列出拨出方和接收方的11位数字构成的手机号码,其中以空格分隔。
输出格式:
在一行中给出聊天狂人的手机号码及其通话次数,其间以空格分隔。如果这样的人不唯一,则输出狂人中最小的号码及其通话次数,并且附加给出并列狂人的人数。
输入样例:
4
13005711862 13588625832
13505711862 13088625832
13588625832 18087925832
15005713862 13588625832
输出样例:
13588625832 3
思路:
1、数据量太多,且每一条记录数字很大,很难直接比较,也超过了int型的最大范围,用散列。
2、电话记录条数为N,需要至少2N的数组。取大于2n的第一个素数作为数组大小,散列函数就用手机号的最后5位对这个素数取余。
3、用链表解决地址冲突。
4、java其实有一个容器HashMap,不想自己建散列表的可以直接用这个容器。
5、测试点一通不过,不知道是啥数据,测试点二超时,可能跟用Scanner效率太低有关。StreamTokenizer又不会存储手机号这样的String,会被自动识别为数字。等下次课看看测试点一是啥情况。
public class Main {public static void main(String[] args) throws IOException {// TODO Auto-generated method stubScanner in = new Scanner(System.in);int n = in.nextInt();HashTable H = creat_hashtable(2*n);for(int i = 0;i<n;i++) {String phone_number = in.next();insert(H,phone_number);phone_number = in.next();insert(H,phone_number);}traversal_print(H);}private static void traversal_print(HashTable H) {// TODO Auto-generated method stubString str = null;int num=-1; //最大通话次数int people=0; //电话狂人的人数for(int i =0;i<H.tablesize;i++) {Lnode p = H.head[i].next;while(p!=null) {if(p.count>num) {num = p.count;str = p.data;people =1;}else if(p.count == num) {if(str.compareTo(p.data)>0) {str = p.data;people++;}}p=p.next;}}System.out.print(str+" "+num);if(people>1)System.out.print(" "+people);}private static void insert(HashTable H, String temp) {// TODO Auto-generated method stubint num = Integer.parseInt(temp.substring(6));num = num%H.tablesize;Lnode node = new Lnode();node.data = ""+temp;if(H.head[num].next == null) { //该位置没有元素node.count = 1;H.head[num].next = node;}else { //该位置已经有元素,需要判断里面有没有等于我的元素Lnode p = H.head[num].next; //有的话,count++,没有的话,插入我。while(p!=null) {if(p.data.compareTo(temp)==0) {p.count++;break;}elsep=p.next;}if(p==null) {p = H.head[num].next;H.head[num].next = node;node.next = p;node.count =1;}}}private static HashTable creat_hashtable(int N) {// TODO Auto-generated method stubint tablesize = next_prime(N);HashTable H = new HashTable(tablesize);return H;}private static int next_prime(int n) {// TODO Auto-generated method stubint Max_value = (int) Math.pow(10, 6);for(int i =n+1;i<Max_value;i++) {int flag = 1;if(i%2==0)continue;for(int j = 2;j<=Math.sqrt(i);j++) {if(i%j==0) {flag = 0;break;}}if(flag ==1)return i; }return 0;}}class HashTable{HashTable(int tablesize){this.tablesize = tablesize;head = new Lnode[tablesize];for(int i =0;i<tablesize;i++) {head[i] = new Lnode();}}int tablesize =0;Lnode [] head ;
}
class Lnode{String data = null;int count=0;Lnode next = null;
}
电话聊天狂人(java)相关推荐
- 7-14 电话聊天狂人 (25 分)map做法 + 详解 + 思路分析
7-14 电话聊天狂人 (25 分)map做法 1:题目 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤10 5 ),为通话记录条数.随后N行 ...
- 7-20 电话聊天狂人(25 分)(Hash模板)
7-20 电话聊天狂人(25 分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤105),为通话记录条数.随后N行,每行给出一条通话记录.简单 ...
- PTA 电话聊天狂人 思路分析及代码解析
PTA 电话聊天狂人 思路分析及代码解析v1.0 一.前导 1. 需要掌握的知识 2. 题目信息 二.解题思路分析 1. 题意理解 1. 1 输入数据 1.2 输出数据 2. 思路分析 三.具体实现 ...
- (C语言详解)11-散列1 电话聊天狂人(小白实现详细解释)
本博文源于浙江大学<数据结构>.电话聊天狂人是非常有趣的一道题.姥姥在小白专场里从main函数搭建.重要函数编写.模块的改变与裁剪非常仔细的说明,下面就给出详细指导: 博主在前篇博文已经将 ...
- 7-3 电话聊天狂人 (25 分)
暑假字符串专题HBU程序设计训练营总结 ?点这里 7-3 电话聊天狂人 (25 分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤105),为 ...
- 7-1 电话聊天狂人 (25分) PTA 数据结构
7-1 电话聊天狂人 (25分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤10 5 ),为通话记录条数.随后N行,每行给出一条通话记录. ...
- 数据结构PTA 基础实验5-2.2 电话聊天狂人
基础实验5-2.2 电话聊天狂人 题目 解法 题目 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤105),为通话记录条数.随后N行,每行给出一条通 ...
- 5-20 电话聊天狂人
5-20 电话聊天狂人 (25分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数NN(\le 10^5≤105),为通话记录条数.随后NN行,每 ...
- 7-14 电话聊天狂人(25 分)
7-14 电话聊天狂人(25 分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤105 ),为通话记录条数.随后N行,每行给出一条通话记录.简单 ...
最新文章
- Keepalived + LVS-DR搭建高可用Web服务器集群
- OpenCV3.0中的离散傅里叶变换
- 如何提高lstm的预测精度_如何提高示波器的测试精度?五大因素助您了解!
- Spring过滤器组件自动扫描
- Spring(3.2.3) - Beans(11): depends-on
- git-从入门到熟悉
- [Editor][003][Emacs] 从零到高级的进阶 - 实践开发 - emacs tutorial的使用和基本导航键
- 使用GridFS上传下载图片以及其他文件
- VS 提示:请考虑使用 app.config 将程序集“XXX”从版本“XX”重新映射到版本“XX”,以解决冲突并消除警告。...
- mysql在windows启动_MySQL笔记:mySQL在windows环境启动
- Rayman的绝顶之路——Leetcode每日一题打卡20
- Data truncation: Data too long for column ‘xxx‘ at row 1
- R语言学习笔记(四)--数据结构
- Strong Convexity
- FireFoxOS 初体验
- 迭代法计算平方根(难度系数:2颗星)
- IDE工具(42) Alibaba Cloud Toolkit 一键部署插件使用入门
- Android和风SDK,AndroidSDK——和风天气使用初体验
- sendmail danted
- 2022哪款充电宝质量好?2022充电宝排行
热门文章
- 移动医疗应用遍地开花,却抓不住用户的核心需求
- windows环境下cmd切换不同盘目录
- 在Ubuntu18.04.2LTS上安装电子书软件
- Koa洋葱圈模型源码浅析(`await next()`为什么能够形成洋葱圈模型?)
- 高防CDN如何防护CC攻击
- ORA-04021导致oracle11gADG备库宕机问题处理
- fragment重叠问题
- centos7 vi保存退出_linux vi保存退出命令 (如何退出vi)
- oracle maven依赖
- python fft 归一化_基本的FFT归一化问题