Go Dominator
func dominator(a []int) int {
size, value, index := 0, 0, 0
for k, v := range a {
switch {
case size == 0:
size++
value = v
index = k
case value != v:
size--
default:
size++
}
}
candidate := -1
if size > 0 {
candidate = value
}
count := 0
for _, v := range a {
if v == candidate {
count++
}
}
if count <= len(a)/2 {
index = -1
}
return index
}
This finds a value that appears in more than half of the array, then returns one valid index for it.