Majority Element
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.对数组排序,位于中间的元素一定是出现次数超过一半的元素。
3.Moore’s Voting算法,每次删掉集合中一对不同的元素,直到集合为空或没有不同元素。 若存在元素e出现频率超过半数,那么集合中最终只有元素e。
//统计每个数字的出现次数, 返回出现次数最多的元素
int majorityElement(vector<int>& nums) {
int z;
map<int, int> c;
for (auto e = nums.begin(); e < nums.end(); e++){
c[*e]++;
if (c[*e] > c[z])
z = *e;
}
return z;
}
//排序后输出中间元素
int majorityElement(vector<int>& nums) {
sort(nums.begin(), nums.end());
return nums[nums.size()>>1];
}
//Moore's Voting算法
int majorityElement(vector<int>& nums) {
int c, z = nums[0];
for (auto e = nums.begin() + 1; e < nums.end(); e++){
if (*e == z)
c++;
else if (!c)
z = *e;
else
c--;
}
return z;
}