题目

Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.

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

代码:oj测试通过 Runtime: 197 ms

 class Solution:
# @param num, a list of integers
# @return an integer
def majorityElement(self, num):
if len(num) == 1:
return num[0] candidate = 0
count = 0
for i in range(len(num)):
if count == 0:
candidate = num[i]
count += 1
else:
if num[i] == candidate :
count += 1
else:
count -= 1
return candidate

思路

这个自己想不出来。上网找的Moore Voting算法。

这个方法在思路上还是比较朴实无华的,但是很精妙。

注意题目的条件,重复出现大于数据长度一半的元素为众数。

因此可以采用一种对冲思路:一旦相邻的两个元素不同,就把这两个元素对冲抵消掉;由于众数的出现频次大于数据其他所有元素出现频次之和,所以这种对冲抵消最后剩下的一定是众数。

之前看过几篇日志说这道题 还不错 记录在下面:

http://www.yanyulin.info/pages/2014/12/851338983752.html

http://www.geeksforgeeks.org/majority-element/

http://bookshadow.com/weblog/2014/12/22/leetcode-majority-element/

最新文章

  1. Android 的Parcelable接口
  2. 查看数据库表的数据量和SIZE大小的脚本修正
  3. elasticsearch agg
  4. javascript删除元素节点
  5. SpringMVC学习--入门程序
  6. 循环报数 Java实现
  7. 学习swift开源项目
  8. 理解cookie的path和domain属性
  9. 使用prototype 对象定义类成员
  10. 17.python自定义函数
  11. JQuery内容从左边框移到右边框
  12. 【转载】React入门-Todolist制作学习
  13. 使用D3D渲染YUV视频数据
  14. web前端开发分享-css,js进阶篇
  15. Entity Framework技巧系列之十三 - Tip 51 - 55
  16. 201521123064 《Java程序设计》第1周学习总结
  17. Java分布式应用技术架构
  18. NOIp2018提高组 双栈排序
  19. A Boring Problem UVALive - 7676 (二项式定理+前缀和)
  20. Linux 小知识翻译 - 「服务器」

热门文章

  1. C#利用WebClient 两种方式下载文件(一)
  2. C#基础知识图谱
  3. python property用法
  4. C++ vector容器类型的用法及注意
  5. Videos
  6. 【luogu P1637 三元上升子序列】 题解
  7. java编程基础——栈压入和弹出序列
  8. C#的接口基础教程之三 定义接口成员
  9. [未完] term.js 记录遇到的问题
  10. dijkstra算法优先队列