面试题39:数字组中出现次数超过一半的数字

# -*- coding:utf-8 -*-
class Solution:
    def MoreThanHalfNum_Solution(self, numbers):
        # write code here
        """
        # 方法1
        # 时间复杂度:O(n)   空间复杂度:O(n)
        # 构造2个list,一个存储不相同的元素,一个存储不相同元素出现的次数
         newArray = list(set(numbers))
        lst = [0]*len(newArray)
        for i in range(len(numbers)):
            if numbers[i] in newArray:
                lst[newArray.index(numbers[i])] += 1
        for j in range(len(lst)):
            if lst[j] > len(numbers)/2:
                return newArray[j]
        return 0
        """

        # 方法2
        # 时间复杂度:O(n)   空间复杂度:O(n)
        # 构造字典dict,key=元素,value=出现次数
        numdict = {}
        for item in numbers:
            if item in numdict:
                numdict[item] += 1
            else:
                numdict[item] = 1
            if numdict[item] > (len(numbers)/2):
                return item
        return 0
  
        # 方法3
        # 如果想要空间复杂度为O(1),时间复杂度为O(n)
        # 思路没懂

  

posted @ 2019-08-12 10:16  lililili——  阅读(141)  评论(0)    收藏  举报