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;
}