Java Equi Leader
public class Solution {
public static int equiLeader(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 leader = -1;
if (leaderCount > a.length / 2.0) {
leader = candidate;
}
int count = a.length;
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.