LeetCode:229. 求众数 II

1、题目描述

给定一个大小为 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。

说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1)。

示例 1:

输入: [3,2,3]
输出: [3]

示例 2:

输入: [1,1,1,3,3,2,2,2]
输出: [1,2]

2、题解

2.1、解法一

class Solution(object):
    def majorityElement(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        n = len(nums)
        m = n//3
        dic = {}

        i = 0
        while i <n:
            k = nums[i]
            if k not in dic:
                dic[k] = 1
            else:
                print(k)
                dic[k] = dic[k] +1
            i += 1

        print(m)
        print(dic)
        return [i for i in dic if dic[i] >m]

2.2、解法二

class Solution(object):
    def majorityElement(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        n = len(nums)
        m = n//3
        nums.sort()
        i = 0
        ret = []
        while i <n:
            tmp = nums[i]
            count = 0
            while i < n and nums[i] == tmp:
                count += 1
                i += 1
            if count > m:
                ret.append(tmp)
            if count == 0:
                i = i+1
        return ret

  

posted @ 2018-12-04 19:37  RobotsRising  阅读(503)  评论(0编辑  收藏  举报