文巾解题 面试题 17.10. 主要元素

Posted 刘文巾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文巾解题 面试题 17.10. 主要元素相关的知识,希望对你有一定的参考价值。

1 题目描述

2 解题思路

因为是O(N)的时间复杂度和O(1)的空间复杂度,所以想到的是Boyer-Moore 投票算法。这个算法的原理可见:算法整理:Boyer-Moore 投票算法_刘文巾的博客-CSDN博客

class Solution(object):
    def majorityElement(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        candidate=-1
        count=0

        for i in nums:
            if(count==0):
                candidate=i
            
            if(candidate==i):
                count+=1
            else:
                count-=1
#Boyer-Moore 投票算法


        if(nums.count(candidate)>len(nums)//2):
            return candidate
        else:
            return -1
#判断剩下的这个数是不是数量超过一半的那个数

以上是关于文巾解题 面试题 17.10. 主要元素的主要内容,如果未能解决你的问题,请参考以下文章

文巾解题 面试题 01.03. URL化

文巾解题 面试题 01.01. 判定字符是否唯一

文巾解题 面试题 01.06. 字符串压缩

文巾解题 面试题 01.02. 判定是否互为字符重排

面试题 17.10. 主要元素

面试题 17.10. 主要元素投票算法 C++