Rust Dominator
fn dominator(a: &[i64]) -> i64 {
let mut size = 0i64;
let mut value = 0;
let mut index: i64 = 0;
for (k, &v) in a.iter().enumerate() {
if size == 0 {
size += 1;
value = v;
index = k as i64;
} else if value != v {
size -= 1;
} else {
size += 1;
}
}
let candidate = if size > 0 { value } else { -1 };
let count = a.iter().filter(|&&v| v == candidate).count() as i64;
if count <= a.len() as i64 / 2 {
index = -1;
}
index
}
This finds a value that appears in more than half of the array, then returns one valid index for it.