我有一个数组,让我们说$array = array(2, 1, 8, 3, 6, 0, 10, 10)
,我希望获得该数组的第二大值。
哪种分类/搜索技术最佳&我该怎么用呢?
答案 0 :(得分:6)
我只是从您的数组中删除重复项(使用array_unique
),然后使用rsort
(使用Quicksort)和SORT_NUMERIC
标记从数字上进行排序从最高到最低:
$array = array(2, 1, 8, 3, 6, 0, 10, 10);
$unique_array = array_unique($array);
rsort($unique_array, SORT_NUMERIC);
$second_highest = $unique_array[1]; // will be 8
答案 1 :(得分:3)
这样的东西?
$array = array(2, 1, 8, 3, 6, 0, 10, 10);
rsort($array);
echo $array[1]; // 10
这反向对数组进行排序,然后输出第二个元素。
编辑:如果您想要第二高的唯一值,只需添加一个array_unique调用:
$array = array(2, 1, 8, 3, 6, 0, 10, 10);
$array = array_unique($array);
rsort($array);
echo $array[1]; // 8
答案 2 :(得分:3)
你可以使用rsort,但它会做很多不需要的额外操作(快速排序有O(logn)复杂度)。 如果你只传递一次这样的数组(O(n)):
,可能要快得多$largest=$array[0];
$secondLargest=null; //none present, by default
foreach($array as $value)
if($value>$largest)
{
$secondLargest=$largest;
$largest=$value;
}
在大型阵列上它会明显加快,但只有当你想要第一个,第二个,也许是第三大元素时它才会好。在所有其他情况下,对数组进行排序并动态获取第N个最大元素会更合理。