美文网首页剑指offer-python
数组中出现次数超过一半的数字

数组中出现次数超过一半的数字

作者: fighting_css | 来源:发表于2018-08-04 23:28 被阅读0次

    【题目描述】数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
    【思路】最开始的思路是借助左程云老师的思路,用一个cur和time来找出出现次数大于数组一半的字符,后来发现对于不存在的情况无法判断,如{3,3,4,4,5}还是会输出5。故采用字典映射的方式来寻找出现次数大于一般的字符,同时记得边界条件的判断。
    代码:

    class Solution:
        def MoreThanHalfNum_Solution(self, numbers):
            # write code here
            n = len(numbers)
            #边界条件,元素只有一个时
            if n ==1:
                return numbers[0]
            #以时间换空间,采用字典记录每个数字的出现次数
            dict_num = {}
            #时间复杂度为O(n)
            for i in range(0,n):
                if numbers[i] in dict_num.keys():
                    dict_num[numbers[i]] +=1
                    if dict_num[numbers[i]]>n/2:
                        return numbers[i]
                else: dict_num[numbers[i]] = 1
            return 0
    

    相关文章

      网友评论

        本文标题:数组中出现次数超过一半的数字

        本文链接:https://www.haomeiwen.com/subject/yhsvvftx.html