【发布时间】:2010-09-25 18:01:33
【问题描述】:
我在 PHP 中创建了一个数组,其中包含 bucnh 的 unix 时间戳。
我正在尝试创建一个函数,该函数将返回一个数组,其中包含该数组中 3 个最大数字的索引。
例如,如果最大的数字位于索引 3,5 和 8
如果最大的是 5,第二大的是 8,三者中最小的是 3,我想要一个按顺序保存值 (5,8,3) 的数组。
坦率地说,我不知道如何解决这个问题。有人知道怎么做吗?
【问题讨论】:
我在 PHP 中创建了一个数组,其中包含 bucnh 的 unix 时间戳。
我正在尝试创建一个函数,该函数将返回一个数组,其中包含该数组中 3 个最大数字的索引。
例如,如果最大的数字位于索引 3,5 和 8
如果最大的是 5,第二大的是 8,三者中最小的是 3,我想要一个按顺序保存值 (5,8,3) 的数组。
坦率地说,我不知道如何解决这个问题。有人知道怎么做吗?
【问题讨论】:
Simon 发布了简单且可能足够好的执行方法。
只有当你有一个非常大的数组时,另一个选项是扫描数组并跟踪你看到的三个最高值的索引。这是 O(n),但是(特别是因为它是在解释的 PHP 代码中,而不是编译的内置函数),除了最大的数组之外,所有数组可能都比较慢。
【讨论】:
在伪代码中:
function select(list[1..n], k)
for i from 1 to k
maxIndex = i
maxValue = list[i]
for j from i+1 to n
if list[j] > maxValue
maxIndex = j
maxValue = list[j]
swap list[i] and list[maxIndex]
return list[k]
newarray[] = select(array, 1);
newarray[] = select(array, 2);
newarray[] = select(array, 3);
【讨论】:
在 PHP 代码中:
function threeLargest($array){
krsort($array, "SORT_NUMERIC");
$return[0] = $array[0];
$return[1] = $array[1];
$return[2] = $array[2];
return $return;
}
【讨论】: