加入收藏 | 设为首页 | 会员中心 | 我要投稿 莆田站长网 (https://www.0594zz.com.cn/)- 业务安全、应用安全、终端安全、数据分析、数据应用!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php程序员面试之百度面试题

发布时间:2022-06-30 09:27:23 所属栏目:PHP教程 来源:互联网
导读:面试题不同公司不一样像百度公司要求算法高这个也能理解了,下面整理了一道据说是百度的面试题,我们来看看它的算法与答案吧. 据说是一个百度php的面试题,已给定一个数组: $arr = array(b=a, c=a, e=b, d=b, f=c, g=e, h=f); 写一个算法,完成到以下格式的转换:
  面试题不同公司不一样像百度公司要求算法高这个也能理解了,下面整理了一道据说是百度的面试题,我们来看看它的算法与答案吧.
 
  据说是一个百度php的面试题,已给定一个数组:
 
  $arr = array(‘b’=>’a’, ‘c’=>’a’, ‘e’=>’b’, ‘d’=>’b’, ‘f’=>’c’, ‘g’=>’e’, ‘h’=>’f’);
  写一个算法,完成到以下格式的转换:
 
  array (
   
      'a' => array (
   
          'b' => array (
   
              'e' => array (
   
                  [0] => 'g',
   
              ),
   
              [0] => 'd',
   
          ),
   
          'c' => array (
   
              'f' => array (
   
                  [0] => 'h',
   
              ),
   
          ),
   
      ),
   
  )
  这个结构应该属于一种Trie树,当时在写的时候由于没发现array_keys()函数第二个参数(汗一个先),于是写了以下这个方法来实现.
 
  function getsomething(&$arr, &$re, $c='') {
   
      $c or $c=array_shift(array_keys($arr));//当未指定开始位置时 从数组第一个元素开始
   
      $flag= false;   //标记 当有和$c对应的key(键)时 设为true
   
      while($k = array_search($c, $arr)) {    //循环获取值为$c的key。
   
          getsomething($arr, $re[$c], $k);    //一直递归到最后没有key对应时
   
          unset($arr[$k]);        //移除  这个元素已经不会再使用了
   
          $flag = true;
   
      }
   
      //当flag为真时 说明之前获得过正常存在的key,不会继续生成[0]下标的元素
   
      if(! $flag) return $re[] = $c;
   
  }
   
  //调用
   
  getsomething($arr, $re, 'a');
  虽然有点儿奇葩,至少还是实现了。以下是某网友使用array_keys()的另一解法:
 
  function _array_keys($k, $arr) {
   
      $return = array();
   
      if($ret = array_keys($arr, $k)) {
   
          foreach($ret as $v) {
   
              if($t = _array_keys($v, $arr)) {
   
                  $return[$v] = $t;
   
              } else {
   
                  $return[] = $v;
   
              }
   
          }
   
      }
   
      return $return;
   
  }
 

(编辑:莆田站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读