function maxSubArrayLenEqualsToK($arr, $k) {
$current = 0;
$len = 0;
$hmap = array();
$size = count($arr);
for ($i = 0; $i < $size; $i++) {
$current += $arr[$i];
if ($current == $k) {
$len = $i + 1;
}
else if (array_key_exists($current - $k, $hmap)) {
$len = max($len, $i - $hmap[$current - $k]);
}
if (!array_key_exists($current,$hmap)) {
$hmap[$current] = $i;
}
}
return $len;
}
$arr = array(1, -1, 5, -2, -3, 2, 3, 3);
$K = 3;
// 1, -1, 5, -2 = 3 (4)
// 5, -2 = 3 (2)
// -2, -3, 2, 3, 3 = 3 (5)
echo maxSubArrayLenEqualsToK($arr, $K);
/*
run:
5
*/