所求数出现次数超过一半,占绝对数量优势。
无论被多少其它数消除过,所求数剩下的数量还是超过一半的。
把其它数都耗死,剩下所求数遗世独立。
# 关键条件:数出现次数超过数组长度的一半,即大于其他所有数出现次数之和。

# 遍历时,我们选定第一个数作为候选,并记该数出现一次,在访问之后元素时,
# 遇到相等,计数加一(添加),不等,计数减一(消除)。如果计数减到0,则换候选。
# 遍历完成候选就是所求——所求数是超过一半的,哪怕它与其它所有数都做一次比较(消除),
# 全局来看count也不会减到0,当然局部可能被其它数完全消除而被赶下候选。
#  但是所求数过一半,谁也耗不过它,所以胜利终究是所求数的 # 
class Solution:
    def MoreThanHalfNum_Solution(self , numbers: List[int]) -> int:
        count = 0
        for num in numbers:
            if not count:            # count减到0, 换候选
                candidate = num
                count += 1
            else:
                if num == candidate: # 遇到相等,计数加一
                    count += 1
                else:
                    count -= 1       # 遇到不等,计数减一
        return candidate