寻找多数元素
2017-04-23 11:38
134 查看
在原序列中去除两个不同的元素后,那么在原序列中的多数元素在新序列中还是多数元素
算法基本思路:
(1)在寻找多数元素的过程中,将计数器置1,遇到相同元素则计数器加1,遇到不同元素则计数器减1,一直到计数器等于0或遍历完整个序列。由此可见,计数器的值表示当前元素抵消掉不同元素后的出现次数;
(2)当计数器在遍历完整个序列前就已经是0,则忽略掉已经遍历过的元素(可以看作两两抵消不影响序列中的多数元素),跳到下一个元素然后计数器重新置1,重复上述步骤,一直到遍历完整个元素;
(3)当遍历完整个序列后,算法会返回一个值,此时我们还需要检测一次这个值是否真的是多数元素,即遍历统计一次。这一步不可或缺。因为上述两个步骤到了遍历完序列后必将返回一个值,无论序列有无多数元素。此值存在三种情况,第一,它真的是多数元素;第二,它只是序列后面的某个元素刚好抵消完序列;第三,两者皆是。我们必须检测一次。
查看原文(*^__^*) 嘻嘻……
主要概念是为多数X保留计数器。如果找到不是X的数字Y,则当前计数器应该推导出1,原因是如果存在5 X和4 Y,则会有一个 5-4)X比Y更多。这可以解释为“4 X配对由4 Y”。
Given an integer array of size n,
find all elements that appear more than
The algorithm should run in linear time and in O(1) space.
算法基本思路:
(1)在寻找多数元素的过程中,将计数器置1,遇到相同元素则计数器加1,遇到不同元素则计数器减1,一直到计数器等于0或遍历完整个序列。由此可见,计数器的值表示当前元素抵消掉不同元素后的出现次数;
(2)当计数器在遍历完整个序列前就已经是0,则忽略掉已经遍历过的元素(可以看作两两抵消不影响序列中的多数元素),跳到下一个元素然后计数器重新置1,重复上述步骤,一直到遍历完整个元素;
(3)当遍历完整个序列后,算法会返回一个值,此时我们还需要检测一次这个值是否真的是多数元素,即遍历统计一次。这一步不可或缺。因为上述两个步骤到了遍历完序列后必将返回一个值,无论序列有无多数元素。此值存在三种情况,第一,它真的是多数元素;第二,它只是序列后面的某个元素刚好抵消完序列;第三,两者皆是。我们必须检测一次。
查看原文(*^__^*) 嘻嘻……
主要概念是为多数X保留计数器。如果找到不是X的数字Y,则当前计数器应该推导出1,原因是如果存在5 X和4 Y,则会有一个 5-4)X比Y更多。这可以解释为“4 X配对由4 Y”。
int Majority2(vector<int> num) { int cnt=0,a=0; for(int i=0;i<num.size();i++) { if(a == num[i]) cnt++; else if(cnt==0) { a = num[i]; cnt=1; } else cnt--; } int count=0; for(int i=0;i<num.size();i++) { if(a == num[i]) { count++; } } if(count>num.size()/2) return a; else return -1; }
Given an integer array of size n,
find all elements that appear more than
⌊ n/3 ⌋times.
The algorithm should run in linear time and in O(1) space.
vector<int> majorityElement(vector<int>& nums) { vector<int> res; int cnt1=0,cnt2=0,a=0,b=1; for(int i=0;i<nums.size();i++) { if(a == nums[i]){ cnt1++; } else if(b == nums[i]){ cnt2++; } else if(cnt1 == 0){ a=nums[i]; cnt1=1; } else if(cnt2 == 0){ b=nums[i]; cnt2=1; } else { cnt1--; cnt2--; } } cnt1=0; cnt2=0; for(int i=0;i<nums.size();i++) { if(nums[i]==a) cnt1++; if(nums[i]==b) cnt2++; } if(cnt1>nums.size()/3) res.push_back(a); if(cnt2>nums.size()/3) res.push_back(b); return res; }
相关文章推荐
- p99 寻找多数元素
- 169. Majority Element (寻找多数元素)
- 寻找多数元素
- 寻找多数元素(主元素)
- 寻找多数元素 算法
- 寻找数列中多数元素(递归实现)
- 算法之道---寻找多数元素算法(Java)
- 《啊哈!算法》读书笔记(第九章)——寻找多数元素问题
- 寻找多数元素问题
- 【算法分析】寻找多数元素
- 寻找多数元素(Majority)
- 寻找多数元素/主元素问题
- 寻找多数元素
- 寻找多数元素
- 寻找多数元素的递归和迭代版本
- [算法] 利用递归中的归纳法寻找多数元素(主元素)
- 寻找多数元素
- 004-寻找多数元素-归纳法-《算法设计技巧与分析》M.H.A学习笔记
- 算法 寻找多数元素
- 007-寻找第k小元素-分治法-《算法设计技巧与分析》M.H.A学习笔记