摩尔投票法

原理: 在一个序列中,两两消除不相同的元素,最后如果存在剩下的元素,那它原本的数量一定超过一半。

理解: 有k个帮派,每个帮派有几个人,大家随机站成一排,一同打擂台。如果擂台上没人(count==0)那你就站上去成为守擂的人(major=i,count=1);如果擂台上的人和你处于一个帮派(major==i),那你就也站上去( count+=1);如果擂台上的人和你不是一个帮派(major!=i),那你就杀掉擂台上的一个人(count-=1)。
也就是说,major是守擂的帮派,count是守擂的人。如果最后还有守擂的人(count>0),则major获胜。

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        major = None
        count = 0
        if len(nums)==0:
            return -1
        else:
            for i in nums:
                if count == 0:
                    major = i
                    count += 1
                else:
                    if i == major:
                        count += 1
                    else:
                        count -= 1
        if count > 0:
            return major
        else:
            return -1
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页