Lintcode46 Majority Number solution 题解

【题目描述】

Given an array of integers, the majority number is the number that occurs more than half of the size of the array. Find it.

Notice:You may assume that the array is non-empty and the majority number always exist in the array.

给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。

注意:你可以假设数组中没有非空和主元素。

【题目链接】

http://www.lintcode.com/en/problem/majority-number/

【题目解析】

最直观的想法就是,建立HashMap,记录list中的每一个integer元素的个数,如果大于1/2 list长度,即可返回。

进一步分析发现,其实并不需要记录所有的integer元素的个数,可以只记录当前最多的那一个majority。这种方法也称为: Boyer–Moore majority vote algorithm

换一种角度,是否可以直接从list中读取这个majority呢?如果对list进行排序,那么1/2处的元素,也就是majority的那个integer了。当然这种方法有个问题,就是对于没有majority的情况下(没有一个达到了1/2 总长度),是无法判断是否存在majority的,如果题目中明确一定存在这样的majority,那么这种方法也是可行的。

时间 O(n), 空间 O(1)

【参考答案】

http://www.jiuzhang.com/solutions/majority-number/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,774评论 0 33
  • LeetCode 刷题随手记 - 第一部分 前 256 题(非会员),仅算法题,的吐槽 https://leetc...
    蕾娜漢默阅读 17,933评论 2 36
  • 努力究竟有什么意义呢?知乎上各类大神都有很好的解释:为了赚更多钱,为了成就感,为了实现自己的理想。一万个人有一万种...
    MissSweeting阅读 1,335评论 10 6
  • 《格言联璧》中描述的“古之学者在心上做工夫,故发之容貌,则为盛德之符;今之学者在容貌上做工夫,故反之于心,则为实德...
    行一馆阅读 333评论 0 0
  • 问题1:到底产生了什么价值? 价值在于: 1.提供给公司或者雇主更多的利润 2.提供给用户更优秀更便捷的体验 3....
    slade_sal阅读 1,914评论 0 0