代码拉取完成,页面将自动刷新
同步操作将从 star/offer100 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
<?php
/**
* 最小的K个数
*
* 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
*
* 解法一
* 可以改变数组的情况下
* 使用快速排序
* 解法二
* 维护一个最大堆,在堆中存K个数(堆顶为最大当前K个数中的最大数),每个数与堆顶比较,当i个数小于堆顶元素,堆顶出堆,该第i个数入堆,最后堆中的元素为最小的k个数
*/
function GetLeastNumbers_Solution($array, $k)
{
if (!is_array($array) || empty($array)) {
return null;
}
$length = count($array);
$start = 0;
$end = $length - 1;
$index = Partition($array, $start, $end);
while ($index != $k) {
if ($index > $k) {
$end = $index - 1;
$index = Partition($array, $start, $end);
} else {
$start = $index + 1;
$index = Partition($array, $start, $end);
}
}
$result = array_slice($array, 0, $index);
return $result;
}
function Partition(&$array, $start, $end)
{
$temp = $array[$start];
while ($start < $end) {
while (($start < $end) && ($array[$end] >= $temp)) {
$end--;
}
$array[$start] = $array[$end];
while (($start < $end) && ($array[$start] <= $temp)) {
$start++;
}
$array[$end] = $array[$start];
}
$array[$start] = $temp;
return $start;
}
$arr = [4,5,1,6,2,7,3,8];
var_dump(GetLeastNumbers_Solution($arr, 4));
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。