php面试 数组最大数,PHP 十万数字不同数组取最大的5个 (经典面试题topK) (原)

$arr = array(3,5,7,8,1,2,456,78,...101,2345,456);

类似上述数组,共有十万个元素,让我们取出TOP5,下面是我的解法,先上代码再讲解思路

function topk($arr)

{

//取十万数组的前五个元素组成升序数组

$result = sort(array_slice($arr,0,5));

for($i=5;$i<100000;$i++){

for($j=4;$j>=0;$j--){

if($result[$j]

$result[$j] = $arr[$i];

unset($result[0]);

}

}

}

}

具体思路是,拿出前五个元素组成升序队列,将数组剩下的元素与该升序队列进行循环比较,若大于小数组任一元素,则替换该元素,并删除小数组最小的元素,这种处理方法复杂度最差的情况是这9555次循环里面每个元素与小数组每个元素都比较了5次,也就是最多是 5N

还有一种思路呢,是按冒泡排序,十万数字走五次,取最后五个元素就是数组的top5,复杂度是 5N

-----------------------------------------------END-------------------------------------------------------------------------------

如果有发现错误的地方麻烦留言告知,让我能及时修正哟   感谢~

原文:https://www.cnblogs.com/gyrgyr/p/10741789.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值