有10亿条订单数据,属于1000个司机的,请取出订单量前20的司机

本文阅读 1 分钟
首页 PHP笔记 正文
  1. 思路:
  2. 1、先顺序读取10亿条数据,统计每个司机各点多少订单量
  3. 2、构建一个最大堆,顺序过滤1000个司机,找到前20个司机
  4. 伪代码:
  5. $order_data = [];
  6. foreach(10亿条订单 as $order_info) {
  7. if(isset($order_data[$order_info]) {
  8. $order_data[$order_info] ++;
  9. } else {
  10. $order_data[$order_info] = 1;
  11. }
  12. }
  13. $map = [];
  14. foreach ($order_data as $num) {
  15. if (count($map) < 20) {
  16. $map[] = $num;
  17. continue;
  18. }
  19. $min = min($map);
  20. if ($num > $min) {
  21. for ($i = 0; $i < count($map); ++$i) {
  22. if ($map[$i] == $min) {
  23. $map[$i] = $num; //将最小值替换
  24. break; //跳出循环,只替换一次
  25. }
  26. }
  27. }
  28. }
解压密码: detechn或detechn.com

免责声明

本站所有资源出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。

本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户自行鉴别,做一个有主见和判断力的用户。

本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。

php7性能为什么提升这么高
« 上一篇 04-18
php-fpm各配置含义,fpm的daemonize模式
下一篇 » 04-18

发表评论