在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
题目: n个猴子围坐一圈,从第一个猴子开始数,到第m个出列,求最后一个猴子的编号. 分析: 首先想到循环,然后队列,然后堆,所以用数组模拟一个循环的列表,下标为[0-(n-1)],下标+1整除m干掉元素,否则加入队尾,干掉原来的元素, 实现: 1 <?php 2 echo getLastOne(6,2); 3 4 function getLastOne($n,$m){ 5 $arr=range(1,$n); 6 $i= 0; 7 while(count($arr)!=1){ 8 9 if(($i+1)%$m==0){ 10 unset($arr[$i]); 11 }else{ 12 $arr[]=$arr[$i]; //array_push()也是调用这个 13 unset($arr[$i]); 14 } 15 $i++; 16 } 17 return $arr[$i]; 18 } 引申: (-)指定从第x个开始数. 1 $arr1 = array_slice($arr,0,$x); 2 $arr2 = array_slice($arr,$x); 3 foreach($arr1 as $k){ 4 $arr2[] = $k; 5 } 6 7 $arr=$arr2; (=)递推优化 1 $i=0; 2 for($i=2;$i<=$m;$i++){ 3 $res=0; 4 $res=($i+$m)%$n; 5 } 6 return $res+1; 这玩意装b有用,主要是掌握这种计算和优化的思想.大量的算法主要是c和c++的底层实现,相对于php扁平化的敏捷开发,数据库才是瓶颈.(php7之后yaf要大兴)
|
2022-07-18
2022-08-17
2022-11-06
2022-07-29
2022-08-18
请发表评论