PHP Equi Leader
function equiLeader(array $a): int
{
$leaderSize = $value = $leaderCount = 0;
foreach ($a as $k => $v) {
if ($leaderSize === 0) {
$leaderSize++;
$value = $v;
} elseif ($value !== $v) {
$leaderSize--;
} else {
$leaderSize++;
}
}
$candidate = $leaderSize > 0 ? $value : -1;
foreach ($a as $v) {
if ($v === $candidate) {
$leaderCount++;
}
}
$leader = -1;
if ($leaderCount > count($a) / 2) {
$leader = $candidate;
}
$count = count($a);
$lLeaderCount = $equiLeaders = 0;
foreach ($a as $k => $v) {
$leftHalf = (int)(($k + 1) / 2);
$rightHalf = (int)(($count - $k - 1) / 2);
if ($v === $leader) {
$lLeaderCount++;
}
$rLeaderCount = $leaderCount - $lLeaderCount;
if ($lLeaderCount > $leftHalf && $rLeaderCount > $rightHalf) {
$equiLeaders++;
}
}
return $equiLeaders;
}
This keeps leader counts on both sides of the split and counts positions where the same leader survives in each half.