Bash Dominator
dominator() {
local -n _a="$1"
local _size=0 _value=0 _count=0 _index=0
local _k _v
for _k in "${!_a[@]}"; do
_v=${_a[$_k]}
if (( _size == 0 )); then
((_size++))
_value=$_v
_index=$_k
elif (( _value != _v )); then
((_size--))
else
((_size++))
fi
done
local _candidate
if (( _size > 0 )); then _candidate=$_value; else _candidate=-1; fi
_count=0
for _v in "${_a[@]}"; do
if (( _v == _candidate )); then ((_count++)); fi
done
if (( _count <= ${#_a[@]} / 2 )); then
_index=-1
fi
echo "$_index"
}
This finds a value that appears in more than half of the array, then returns one valid index for it.