zoukankan      html  css  js  c++  java
  • 软件工程课堂练习找水王续

    题目:

    随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的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() 函数用于对数组单元按照键名从高到低进行排序。

     1 <?php
     2 $idlist = array(1,1,2,2,3,3,4);  //id 列表
     3 
     4 function validate($list)
     5 {
     6     $result=array();
     7     foreach ($list as $v)
     8     {
     9         if(!isset($result[$v]))   //第一次出现 ,赋初始发帖数为1
    10         {
    11             $result[$v] = 1;
    12         }else                     //再次出现 ,发帖数+1
    13         {
    14             $result[$v]++;
    15         }
    16     }
    17     if(arsort($result))  //对每个id按发帖数降序排列
    18     {
    19         reset($result);
    20         next($result);
    21         next($result);
    22         if(current($result) < (count($list)/4))  //确认三个小水王的发帖数都大于总帖数的1/4
    23         {
    24             die('ID list 非法!');
    25         }
    26     }
    27     reset($result);
    28     echo key($result) . '<br >';
    29     next($result);
    30     echo key($result) . '<br >';
    31     next($result);
    32     echo key($result) . '<br >';
    33 }
    34 
    35 validate($idlist);
    36 
    37 ?>

    第一次插入新键时时间复杂度是O(n)

    查找时时间复杂度是O(1)

    排序用的是快排 O(nlogn)~(n^s)  1<s<2

    时间上应该慢一些

  • 相关阅读:
    第五章总结
    第二章总结
    第一章、基础知识总结
    实验 9 根据材料编程
    实验5
    汇编实验4
    实验 3 编程、编译、连接、跟踪
    实验 2 用机器指令和汇编指令编程
    汇编-实验一
    react面试笔录
  • 原文地址:https://www.cnblogs.com/xiaoxt/p/5522679.html
Copyright © 2011-2022 走看看