由于要满足equi-leader,则必须是整个数组的leader,证明如下:leader > i+1/2 && leader > (n-i-1)/2,那么leader > n/2
我之前c++写了,但是有错五
1 static int equiLeader(int[] a){ 2 int len = a.length; 3 int equi_leaders = 0; 4 5 // first, compute the leader 6 int leader = a[0]; 7 int ctr = 1; 8 9 for(int i = 1; i < a.length; i++){ 10 if(a[i] == leader) ctr++; 11 else ctr--; 12 if(ctr == 0){ 13 ctr = 1; 14 leader = a[i]; 15 } 16 } 17 18 // check if it's a leader? 19 int total = 0; 20 for(int i : a){ 21 if(i == leader) total++; 22 } 23 24 if(total <= (len/2)) return 0; // impossible 25 26 int ldrCount = 0; 27 for(int i = 0; i < a.length; i++){ 28 if(a[i] == leader) ldrCount++; 29 int leadersInRightPart = (total - ldrCount); 30 if(ldrCount > (i+1)/2 && leadersInRightPart > (len-i-1)/2){ 31 equi_leaders++; 32 } 33 } 34 35 return equi_leaders; 36 }