我想您永远无法击败O(n)
,因为需要检查所有元素是否符合规则。下面检查每个元素一次O(n)
并将其删除,如果它不是整数,则进行简单的比较。
然而,仍然会有稍大的存储复杂度(需要存储过滤后的数组)。
O(n)
是复杂性的表示,在这种情况下,复杂性是n
(数组中元素的数量),因为每个元素必须被查看一次。
例如,如果您想将每个数字乘以每个其他数字,那么复杂性大约O(n^2)
与每个元素一样,您必须查看每个其他元素(尽管这是一个糟糕的例子)
有关Big O Notation的更多信息,请参阅本指南,因为它被称为
但是尝试以下(改编自上一个问题)
if($only_integers === array_filter($only_integers, 'is_int')); // true
if($letters === array_filter($letters, 'is_int')); // false
然后你可以做
/**
* Test array against provided filter
* testFilter(array(1, 2, 'a'), 'is_int'); -> false
*/
function testFilter($array, $test) {
return array_filter($array, $test) === $array;
}