您的位置:首页 > 其它

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.

我的解法:

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;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: