您的位置:首页 > 其它

169. Majority Element

2016-03-23 11:14 225 查看
题目

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.
分析
方法一想的是对vector进行排序,然后使用unique去重,由于该函数会把重复的挪到最后,不会删除元素,所以只需遍历开头到最后一个不重复的位置,使用count函数计算即可,但是发现了unique函数的一个bug,即初始数组为[3,3,4]时,unique之后会变成[3,4,4],所以改用方法二,使用Moore’s
Voting Algorithm算法。

方法一

class Solution {
public:
int majorityElement(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<int>::iterator unique_end=unique(nums.begin(),nums.end());
for(vector<int>::iterator i=nums.begin();i!=nums.end();i++)
{
int n=count(nums.begin(),nums.end(),*i);
if(n>(nums.size()/2))
{
return *i;
}
}
}
};


方法二

class Solution {
public:
int majorityElement(vector<int>& nums) {
int majority;
int cnt = 0;
for(int i=0; i<nums.size(); i++){
if ( cnt ==0 ){
majority = nums[i];
cnt++;
}else{
majority == nums[i] ? cnt++ : cnt --;
if (cnt >= nums.size()/2+1) return majority;
}
}
return majority;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: