您的位置:首页 > 其它

169. Majority Element

2018-02-24 20:55 120 查看
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.

方法一:将数组排序,元素个数多于一半必在数组中间

class Solution {
public:
int majorityElement(vector<int>& nums) {
if(nums.empty())
return 0;
sort(nums.begin(),nums.end());
return nums[nums.size()/2];
}
};


方法二:利用哈希表统计各元素个数

class Solution {
public:
int majorityElement(vector<int>& nums) {
unordered_map<int,int> map;
for(int i=0;i<nums.size();i++)
{
map[nums[i]]++;
}
for(auto j:map)
{
if(j.second>nums.size()/2)
return j.first;
}
}
};


方法三:(网上摘的)投票算法,每次遇到不同,票数减一,最后剩下的就是候选人

class Solution {
public:
int majorityElement(vector<int>& nums) {
int count=0;
int res=0;
for(int i=0;i<nums.size();i++)
{
if(count==0)
{
res=nums[i];
count=1;
}
else
{
if(res==nums[i])
count++;
else
count--;
}
}
return res;
}
};


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