算法(7)Majority Element II
题目:找出数组中出现次数大于n/3次的数字
思路:摩尔投票法。所有的帖子中都说:先遍历一遍数组找到备选元素,然后再遍历一遍数组考察下这个元素是否是真的超过n/3,然后就直接上代码,但是现在的问题是:我怎么找到这个备选的元素?!票是怎么投起来的呢?通过参考文章中的代码,大致明白了,醍醐灌顶(http://www.cnblogs.com/grandyang/p/4606822.html)。那么怎么遍历一遍数组然后找到备选元素呢?这个算法还得从找到大于一半的数说起:整个数组中有两个不一样的数的时候,就清除掉这两个一样的数,这样的话,最后一个数组里肯定会剩下一些数的!这就是投票的过程咯,然后遍历下数组,检查下这个被选出来的票就可以了!那么对应于n/3,n/4时,这样的情况会不会存在呢?对应于三个数的情况,数组中最多有2个数满足出现次数大于n/3,那么如果只有一个这样的数呢?比如[7,7,7,5,4,6,8,10]这样的呢?首先777入栈,如果也是单反目前栈里数字不一样的,那么这样两个数字就要出栈了,如此,那么当5,4,6袭来,7肯定就是pass掉了,这是大于n/2情况的分析,那么n/3情况的分析呢?应该是说,准备两个栈,两个栈中分别存着目前的两个候选人,然后每当挑战者来了之后,分别同这两个栈中的数字比较,如果不同,那么两个栈就各出局一个!【这里有个小细节,当两个栈中某个栈是空的,那么就挑战者就占用这个栈了】。所以,同理的话,当找到大于n/4的数字,我们就要准备3个栈了(因为最多也就3个元素),如果哪个栈是空的,挑战者就占着空闲的栈位,否则,如果挑战者不等于栈里的任何一个元素,栈里的元素都得弹出来呢!编程时,注意处理好这个”栈“!
答案:
算法(7)Majority Element II的更多相关文章
- LeetCode(169)Majority Element and Majority Element II
一个数组里有一个数重复了n/2多次,找到 思路:既然这个数重复了一半以上的长度,那么排序后,必然占据了 a[n/2]这个位置. class Solution { public: int majorit ...
- Majority Element(169) && Majority Element II(229)
寻找多数元素这一问题主要运用了:Majority Vote Alogrithm(最大投票算法)1.Majority Element 1)description Given an array of si ...
- 【刷题-LeetCode】229. Majority Element II
Majority Element II Given an integer array of size n, find all elements that appear more than ⌊ n/3 ...
- Majority Element,Majority Element II
一:Majority Element Given an array of size n, find the majority element. The majority element is the ...
- leetcode 169. Majority Element 、229. Majority Element II
169. Majority Element 求超过数组个数一半的数 可以使用hash解决,时间复杂度为O(n),但空间复杂度也为O(n) class Solution { public: int ma ...
- 【LeetCode】229. Majority Element II
Majority Element II Given an integer array of size n, find all elements that appear more than ⌊ n/3 ...
- LeetCode169 Majority Element, LintCode47 Majority Number II, LeetCode229 Majority Element II, LintCode48 Majority Number III
LeetCode169. Majority Element Given an array of size n, find the majority element. The majority elem ...
- LeetCode OJ 229. Majority Element II
Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algorit ...
- 【数组】Majority Element II
题目: Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The alg ...
随机推荐
- ETO的公开赛T2《宏聚变》 题解(BY 萌萌哒123456 )
我们注意到这道题中最多有 $(n+q)$ 个数被加入,而每个数最多被删除一次,因此每次操作 $O(logn)$的复杂度是可以接受的. 我们对于$1..100000$之间每个数分别开一个set,维护这个 ...
- ABAP术语-Interface Parameter
Interface Parameter 原文:http://www.cnblogs.com/qiangsheng/archive/2008/02/26/1081800.html Parameter t ...
- Docker运行Nginx服务器
一.获取Docker容器的Nginx镜像 二.创建Docker容器宿主机挂载目录 # 创建挂载目录,-v 显示创建的目录名 [root@idclooknet ~]# mkdir -vp /opt/do ...
- Linux环境下tomcat如何热部署
1.修改tomcat配置文件 1.1第一步修改tomcat-users.xml <role rolename="manager-gui" /> <role rol ...
- Mina 组件介绍之 IoBuffer
在Java NIO 中,ByteBuffer通常作为通信中传递消息的载体.而在Mina中,采用了IoBuffer代替ByteBuffer.Mina给出了不用ByteBuffer的两个主要理由: 1. ...
- 发布django项目
supervisor需要用到的技术 1. nginx反向代理 2. nginx负载均衡 3. uwsgi 4. supervisor 5. virtualenv 安装nginx 详情参考 https: ...
- python三大神器之迭代器
可迭代协议: 内部含有__iter__方法的值/变量都是可迭代的.可迭代类型和python语言之间的协议. 可迭代对象: iterable,内部包含__iter__()函数. 迭代器: iterato ...
- webug学习(1)
webug的题目,比较简单,拿来巩固一哈. 1. 一看就知道是注入漏洞了,啥也不说sqlmap直接开炮. 先-u 之后-u 网址 --current-db 获取当前网址的数据库 所以当前数据库就是 p ...
- 文件 I/O字符流
import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOExceptio ...
- python2.7入门---列表(List)
序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推.Python有6个序列的内置类型,但最常见的是列表和元组. ...