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

题目

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

思路

用一个变量记录当前数字出现的次数,下一个数字不同时变量减一,否则加一。

代码

# -*- coding:utf-8 -*-
class Solution:
    def MoreThanHalfNum_Solution(self, numbers):
        # write code here
        count = 0
        preNum = 0
        for i, v in enumerate(numbers):
            if i == 0:
                count = 1
                preNum = v
                continue
            if v != preNum:
                count -= 1
            else: count += 1
            if count == 0:
                preNum = v
                count = 1
        count = 0
        for i in numbers:
            if i == preNum: count += 1
        return preNum if count > len(numbers) / 2 else 0
发布了572 篇原创文章 · 获赞 47 · 访问量 30万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章