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

【题目描述】数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容