<?php
final class ArrayUtils
{
private static $visited = [];
private static $sum = 0;
public static function containsSum($data, $sum)
{
self::$visited = [];
self::$sum = $sum;
return array_reduce($data, 'ArrayUtils::reduce', false);
}
private static function reduce($carry, $item)
{
$carry |= isset(self::$visited[self::$sum - $item]);
self::$visited[$item] = true;
return (bool) $carry;
}
}
$data = range(0, 49999);
shuffle($data);
var_dump(ArrayUtils::containsSum($data, 1234));
var_dump(ArrayUtils::containsSum($data, -15));
- Output for 5.6.38, 7.1.0 - 7.1.33, 7.2.0 - 7.2.25, 7.3.0 - 7.3.12, 7.4.0
- bool(true)
bool(false)
preferences:
95.05 ms | 402 KiB | 73 Q