软件工程课堂练习找水王续
2016-05-24 10:57
155 查看
题目:
随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?
思路:关联型容器可以很方便解决,php里的array就是关联型数组,php有很多方便的排序函数,所以本次用php实现。
首先对id列表进行遍历,以id为键值对数组$result进行赋值,
如果$result[$id]没有初始化,那么这就是第一次出现,即$result[$id]=1
如果$result[$id]已经初始化,那个发帖数加1,即$result[$id]++
最后最$result数组的值降序排序,取出前三个元素就是三个小水王。
先开始用的sort,未发觉键名都改了,然后看了一下手册:
Note: 此函数为
此处介绍一下php的排序函数:
sort() 函数用于对数组单元从低到高进行排序。
rsort() 函数用于对数组单元从高到低进行排序。
asort() 函数用于对数组单元从低到高进行排序并保持索引关系。
arsort() 函数用于对数组单元从高到低进行排序并保持索引关系。
ksort() 函数用于对数组单元按照键名从低到高进行排序。
krsort() 函数用于对数组单元按照键名从高到低进行排序。
第一次插入新键时时间复杂度是O(n)
查找时时间复杂度是O(1)
排序用的是快排 O(nlogn)~(n^s) 1<s<2
时间上应该慢一些
随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?
思路:关联型容器可以很方便解决,php里的array就是关联型数组,php有很多方便的排序函数,所以本次用php实现。
首先对id列表进行遍历,以id为键值对数组$result进行赋值,
如果$result[$id]没有初始化,那么这就是第一次出现,即$result[$id]=1
如果$result[$id]已经初始化,那个发帖数加1,即$result[$id]++
最后最$result数组的值降序排序,取出前三个元素就是三个小水王。
先开始用的sort,未发觉键名都改了,然后看了一下手册:
Note: 此函数为
array中的元素赋与新的键名。这将删除原有的键名,而不是仅仅将键名重新排序。
此处介绍一下php的排序函数:
sort() 函数用于对数组单元从低到高进行排序。
rsort() 函数用于对数组单元从高到低进行排序。
asort() 函数用于对数组单元从低到高进行排序并保持索引关系。
arsort() 函数用于对数组单元从高到低进行排序并保持索引关系。
ksort() 函数用于对数组单元按照键名从低到高进行排序。
krsort() 函数用于对数组单元按照键名从高到低进行排序。
<?php $idlist = array(1,1,2,2,3,3,4); //id 列表 function validate($list) { $result=array(); foreach ($list as $v) { if(!isset($result[$v])) //第一次出现 ,赋初始发帖数为1 { $result[$v] = 1; }else //再次出现 ,发帖数+1 { $result[$v]++; } } if(arsort($result)) //对每个id按发帖数降序排列 { reset($result); next($result); next($result); if(current($result) < (count($list)/4)) //确认三个小水王的发帖数都大于总帖数的1/4 { die('ID list 非法!'); } } reset($result); echo key($result) . '<br >'; next($result); echo key($result) . '<br >'; next($result); echo key($result) . '<br >'; } validate($idlist); ?>
第一次插入新键时时间复杂度是O(n)
查找时时间复杂度是O(1)
排序用的是快排 O(nlogn)~(n^s) 1<s<2
时间上应该慢一些
相关文章推荐
- .gitignore配置
- PHP简单工厂模式
- Android中字符串拆分或拼接
- android -fragment 碎片
- 在ppt中插入背景音乐的技巧
- 如何转发CSDN文章
- csdn如何转载别人的文章
- csdn如何转载别人的文章
- 如何在博客转载文章
- 深入理解Java的接口和抽象类
- csdn如何转载别人的文章
- 第二次冲刺阶段站立会议(一)
- PAT 1025 反转链表
- PHP使用正则表达式验证电话号码(手机和固定电话)
- Delphi RAD Berlin OutputDebugString 输出调试信息
- jQuery操作鼠标事件大全
- Android Volley完全解析(四),从源码的角度理解Volley
- HashMap实现原理分析
- 从1到n整数中1出现的次数
- 为什么要进行URL编码