OJ 169 Majority Element
2015-03-13 22:29
190 查看
题目要求: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.
我的解法:
分析:首先要知道一个定理,如果一个序列中存在一个出现率大于1/2的元素,我们记为mE,那么如果去掉这个序列中的两个不相同的元素,新序列中一定存在一个出现率大于1/2的元素,依然是mE。
该算法最差情况需要在i指向第一个元素的时候,也就是算法的复杂度最差是O(n),最好的情况需要n/2。
这个问题还可以直接考虑,通过map来计数,来获取所求的元素。代码如下:
You may assume that the array is non-empty and the majority element always exist in the array.
我的解法:
int majorityElement(vector<int> &num) { int key = num.back(); int k = num.size(); k--; int i = k-1; while (i >= k/2) { if (num[i] != key) { num[i] = num[k-1]; k--; key = num[k-1]; k--; i=k-1; continue; } i--; } return key; }
分析:首先要知道一个定理,如果一个序列中存在一个出现率大于1/2的元素,我们记为mE,那么如果去掉这个序列中的两个不相同的元素,新序列中一定存在一个出现率大于1/2的元素,依然是mE。
该算法最差情况需要在i指向第一个元素的时候,也就是算法的复杂度最差是O(n),最好的情况需要n/2。
这个问题还可以直接考虑,通过map来计数,来获取所求的元素。代码如下:
int majorityElement(vector<int> &num) { map<int, int> count; for (int i : num) { if (++count[i] >= num.size() / 2) { return i; } } }
相关文章推荐
- OJ 169 Majority Element
- OJ 169 Majority Element
- <LeetCode OJ> 169. Majority Element
- [LeedCode OJ]#169 Majority Element
- [leetcode oj 169]Majority Element
- leetcode169---Majority Element(数组中出现次数超过一半的数)
- 169. Majority Element (divide and conquer)
- 169. Majority Element
- leetcode 169. Majority Element
- 169. Majority Element
- LeetCode169 Majority Element, LintCode47 Majority Number II, LeetCode229 Majority Element II, LintCode48 Majority Number III
- 169. Majority Element
- Divide and Conquer:169. Majority Element
- 169_Majority Element
- 【Leetcode】:169. Majority Element 问题 in Go语言
- 169. Majority Element
- Leetcode 169. Majority Element
- 【Leetcode】169. Majority Element
- Leetcode 169. Majority Element
- 2018.03.07 leetcode 打卡 #169. Majority Element