LintCode 48 [Majority Element III]

原题

给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的1/k

给出数组[3,1,2,3,2,3,3,4,4,4],和 k =3,返回 3
数组中只有唯一的主元素

解题思路

  • 大体思路同Majority Element I, Majority Element II是一样的。本题则为k-k抵消
  • 维护一个hash表,当hash表中key的个数等于k的时候,所有key对应的value减一,注意如果value减一之后为零,要删除key
  • python中dictionary相关操作
# get all the keys of a dictionary
dict.keys()
# delete a key in dictionary
dict.pop(key, None) # or dict.pop(key)

完整代码

class Solution:
    """
    @param nums: A list of integers
    @param k: As described
    @return: The majority number
    """
    def removeKey(self, counters):
        keySet = counters.keys()
        removeList = []
        for key in keySet:
            counters[key] -= 1
            if counters[key] == 0:
                removeList.append(key)
            
        for key in removeList:
            counters.pop(key, None)
        
    
    def majorityNumber(self, nums, k):
        counters = {}
        for num in nums:
            if num not in counters:
                counters[num] = 1
            else:
                counters[num] += 1
                
            if len(counters) >= k:
                self.removeKey(counters)
      
        if len(counters) == 0:
            return -1
        
        # 从新计算剩下的数字中在原数组的出现次数
        for key in counters.keys():
            counters[key] = 0

        for num in nums:
            if num in counters:
                counters[num] += 1
            
        
        # find the max key
        maxCounter, maxKey = 0, 0
        for key, value in counters.iteritems():
            if value > maxCounter:
                maxCounter = value
                maxKey = key
        
        return maxKey
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,768评论 0 33
  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,288评论 0 16
  • Redis 数据结构简介 Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为Stri...
    DreamerRzc阅读 237,058评论 26 273
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 1,516评论 0 3
  • 家或许仅是一种想念吧,背井离乡尝尽世态炎凉,怀念起家的温馨,百般缭绕的乡思缠绕了我,彻夜难眠。 梦里的呢喃,呼...
    wang_simon阅读 432评论 0 3