Leetcode_Majority Element

问题描述:Majority Element

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.
Credits:
Special thanks to @ts for adding this problem and creating all test cases.

解题思路

建表记录
这一方法应该是最简单且最容易想到的,我们只需要遍历整个是数组,对每个元素以及出现的次数用链表加以记录,做完该工作后只要再次便利整个数组,查找次数大于[n/2]的,便可得到我们所想要的结果

中位数算法
这一题也可以从用中位数的思想进行解答,当数组被整理成有序排列之后,若数组中存在这样的元素,则会出现两种情况,一是数组个数为基数,那么新数组的中间那个元素肯定是我们要找的元素,二是该数组个数为偶数,则中间两个元素必定相且为我们所寻找的元素。
当我们遇到无需数组是,第一件事为对数组进行排序,然而真的要将元素全部排序结束么,答案是当然不需要!我们只需要将数组排列至数组中间位置,找到中间位置的元素。但所得元素未必是我们所寻找的(如数组不存在这样的元素),因此,我们需要再遍历一边原始数组加以检验。该思路的实现可参考:http://blog.csdn.net/u013014440/article/details/47402955

Moore’s voting Algorithm
算法思想为每找出两个不同的element,则成对删除。最终剩下的一定就是所求的。但值得注意的是,如果数组中不存在这样的书,所得结果肯定是错的,为避免这样的情况,我们需要想第二种方法进行检验,详细讲解以及代码实现请见:http://blog.csdn.net/u013014440/article/details/47379209

综合比较

对于第一种解决思路,思路比较简单也容易实现,但不管从时间复杂度还空间复杂度上来讲,都不太合适。
第二种方法,需要对中位数算法进行一些基本的了解,处理的数组如过是有序数组,个人觉得应该是三种解决方案中最为简单快速的方式,如果为无序数组,我们须对其进行排序,但值得注意的是,在该思路中,不必完成所有排序,只需到中间位置即可,在某种程度上节约了资源的开销。
第三中方式时间复杂度为O(n),而由于并不需要真的删除数组元素,我们也并不需要额外的空间来保存原始数组,空间复杂度为O(1)。在处理大量数据过程中,第三种算法性能上应更为优越。
如果需要找出该元素且算出次数,第一种以不需要做任何修改,第二种以及第三种,我们只需要在检验过程中多出现次数进行输出即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值