7-14 电话聊天狂人(25 分)

给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人。

输入格式:

输入首先给出正整数N(≤10​5​​),为通话记录条数。随后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)相关推荐

  1. 7-14 电话聊天狂人 (25 分)map做法 + 详解 + 思路分析

    7-14 电话聊天狂人 (25 分)map做法 1:题目 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤10 ​5 ​​ ),为通话记录条数.随后N行 ...

  2. 7-20 电话聊天狂人(25 分)(Hash模板)

    7-20 电话聊天狂人(25 分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤10​5​​),为通话记录条数.随后N行,每行给出一条通话记录.简单 ...

  3. PTA 电话聊天狂人 思路分析及代码解析

    PTA 电话聊天狂人 思路分析及代码解析v1.0 一.前导 1. 需要掌握的知识 2. 题目信息 二.解题思路分析 1. 题意理解 1. 1 输入数据 1.2 输出数据 2. 思路分析 三.具体实现 ...

  4. (C语言详解)11-散列1 电话聊天狂人(小白实现详细解释)

    本博文源于浙江大学<数据结构>.电话聊天狂人是非常有趣的一道题.姥姥在小白专场里从main函数搭建.重要函数编写.模块的改变与裁剪非常仔细的说明,下面就给出详细指导: 博主在前篇博文已经将 ...

  5. 7-3 电话聊天狂人 (25 分)

    暑假字符串专题HBU程序设计训练营总结 ?点这里 7-3 电话聊天狂人 (25 分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤10​5​​),为 ...

  6. 7-1 电话聊天狂人 (25分) PTA 数据结构

    7-1 电话聊天狂人 (25分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤10 ​5 ​​ ),为通话记录条数.随后N行,每行给出一条通话记录. ...

  7. 数据结构PTA 基础实验5-2.2 电话聊天狂人

    基础实验5-2.2 电话聊天狂人 题目 解法 题目 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤10​5),为通话记录条数.随后N行,每行给出一条通 ...

  8. 5-20 电话聊天狂人

    5-20 电话聊天狂人   (25分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数NN(\le 10^5≤10​5​​),为通话记录条数.随后NN行,每 ...

  9. 7-14 电话聊天狂人(25 分)

    7-14 电话聊天狂人(25 分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤105​​ ),为通话记录条数.随后N行,每行给出一条通话记录.简单 ...

最新文章

  1. Keepalived + LVS-DR搭建高可用Web服务器集群
  2. OpenCV3.0中的离散傅里叶变换
  3. 如何提高lstm的预测精度_如何提高示波器的测试精度?五大因素助您了解!
  4. Spring过滤器组件自动扫描
  5. Spring(3.2.3) - Beans(11): depends-on
  6. git-从入门到熟悉
  7. [Editor][003][Emacs] 从零到高级的进阶 - 实践开发 - emacs tutorial的使用和基本导航键
  8. 使用GridFS上传下载图片以及其他文件
  9. VS 提示:请考虑使用 app.config 将程序集“XXX”从版本“XX”重新映射到版本“XX”,以解决冲突并消除警告。...
  10. mysql在windows启动_MySQL笔记:mySQL在windows环境启动
  11. Rayman的绝顶之路——Leetcode每日一题打卡20
  12. Data truncation: Data too long for column ‘xxx‘ at row 1
  13. R语言学习笔记(四)--数据结构
  14. Strong Convexity
  15. FireFoxOS 初体验
  16. 迭代法计算平方根(难度系数:2颗星)
  17. IDE工具(42) Alibaba Cloud Toolkit 一键部署插件使用入门
  18. Android和风SDK,AndroidSDK——和风天气使用初体验
  19. sendmail danted
  20. 2022哪款充电宝质量好?2022充电宝排行

热门文章

  1. 移动医疗应用遍地开花,却抓不住用户的核心需求
  2. windows环境下cmd切换不同盘目录
  3. 在Ubuntu18.04.2LTS上安装电子书软件
  4. Koa洋葱圈模型源码浅析(`await next()`为什么能够形成洋葱圈模型?)
  5. 高防CDN如何防护CC攻击
  6. ORA-04021导致oracle11gADG备库宕机问题处理
  7. fragment重叠问题
  8. centos7 vi保存退出_linux vi保存退出命令 (如何退出vi)
  9. oracle maven依赖
  10. python fft 归一化_基本的FFT归一化问题