I am attempting the Codility 'Leader' question in JavaScript.

The question is as follows:

> 
> An array `A` consisting of `N` integers is given. The dominator of array `A` is the value that occurs in more than half of the elements of `A`.
> 
> 
> For example, consider array `A` such that
> 
> 
> 
> ```
> A[0] = 3    A[1] = 4    A[2] =  3
> A[3] = 2    A[4] = 3    A[5] = -1
> A[6] = 3    A[7] = 3
> 
> ```
> 
> The dominator of `A` is 3 because it occurs in 5 out of 8 elements of `A` (namely in `>` those with indices 0, 2, 4, 6 and 7) and 5 is more than a half of 8.
> 
> 
> Write a function `function solution(A);` that, given an array `A` consisting of `N` integers, returns index of any element of array `A` in which the dominator of `A` occurs. The function should return −1 if array `A` does not have a dominator.
> 
> 
> For example, given array `A` such that
> 
> 
> 
> ```
> A[0] = 3    A[1] = 4    A[2] =  3
> A[3] = 2    A[4] = 3    A[5] = -1
> A[6] = 3    A[7] = 3
> 
> ```
> 
> the function may return 0, 2, 4, 6 or 7, as explained above.
> 
> 
> Write an efficient algorithm for the following assumptions:
> 
> 
> `N` is an integer within the range `[0..100,000];`
> and each element of array `A` is an integer within the range `[−2,147,483,648..2,147,483,647]`.
> 
> 
> 

My answer is below:

```
function solution(A) {
    const length = A.length
    if (length > 100000) return -1
    const counters = new Array(length).fill(0)
    const negativeCounters = new Array(length).fill(0)
    for (i=0; i < length; i++){
        if (A[i] < -2147483648 || A[i] > 2147483647) return -1
        if (A[i] > -1){
            counters[A[i]] = counters[A[i]] + 1
            if (counters[A[i]] > (length / 2)) return i
        } else {
            negativeCounters[A[i] * -1]  =  negativeCounters[A[i] * -1] + 1
            if (negativeCounters[A[i] * -1] > (length / 2)) return i
        }
    }
    return -1
}

```

This is failing the correctness tests although I have tried a variety of inputs with which it succeeds. The Codility evaluation doesn't list the test input so I can't find input that is breaking the algorithm.

Can anyone spot the problem?