剑指offer:数组中出现超过次数超过一半的数字(python实现)

题目描述

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

思路1:用字典的键值对实现,键存放数组中的数字,值存放数字出现的次数

# -*- coding:utf-8 -*-
class Solution:
    def MoreThanHalfNum_Solution(self, numbers):
        # write code here
        dict = {}
        for num in numbers:
            if num not in dict:
                dict[num] = 1
            else:
                dict[num]+=1
            if dict[num] > len(numbers)/2:
                return num
        return 0

思路2:定义一个计数器,如果数组中出现次数超过一半的数字,那么从左到右遍历一遍计数器的值一定大于0。捕获这个计数器的值,验证他出现的次数是否大于数组的一半。

# -*- coding:utf-8 -*-
class Solution:
    def MoreThanHalfNum_Solution(self, numbers):
        # write code here
        if not numbers:
            return 0
        counter=numbers[0]
        count=1
        for num in numbers[1:]:
            if num==counter or count==0:
                count+=1
                counter=num
            else:
                count-=1
        if count>0:
            conut=0
            for i in numbers:
                if i==counter:
                    count+=1
            return counter if count*2>(len(numbers)) else 0
        else:
            return 0

 

你可能感兴趣的:(剑指offer,剑指offer)