剑指offer-python

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

2018-08-04  本文已影响0人  fighting_css

【题目描述】数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为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
上一篇 下一篇

猜你喜欢

热点阅读