C++ Equi Leader
#include <vector>
int equiLeader(const std::vector<int>& a)
{
int leaderSize = 0;
int value = 0;
for (int v : a) {
if (leaderSize == 0) {
++leaderSize;
value = v;
} else if (value != v) {
--leaderSize;
} else {
++leaderSize;
}
}
int candidate = leaderSize > 0 ? value : -1;
int leaderCount = 0;
for (int v : a) {
if (v == candidate) {
++leaderCount;
}
}
int count = static_cast<int>(a.size());
int leader = -1;
if (leaderCount > count / 2) {
leader = candidate;
}
int lLeaderCount = 0;
int equiLeaders = 0;
for (int k = 0; k < count; ++k) {
int v = a[k];
int leftHalf = (k + 1) / 2;
int rightHalf = (count - k - 1) / 2;
if (v == leader) {
++lLeaderCount;
}
int 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.