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.
解法一:
Moore voting algorithm–每找出两个不同的element,就成对删除即count–,最终剩下的一定就是所求的。时间复杂度:O(n)
这种算法很难想到,却很巧妙。
int majorityElement(vector<int>& nums) {
int curent = 0;
int counter = 0;
for (int i = 0; i < nums.size(); i++){
if (counter == 0){
curent = nums[i];
counter = 1;
}
else{
if (curent == nums[i]){
counter++;
}
else{
counter--;
}
}
}
return curent;
}
解法二:
将数组里的书保存到一个哈希表,然后找到个数大于n/2的数。
int majorityElement2(vector<int>& nums){
map<int, int> m;
map<int, int>::iterator iter;
for (int i = 0; i < nums.size(); i++){
iter = m.find(nums[i]);
if (iter == m.end()){
m[nums[i]] = 1;
}
else{
m[nums[i]]++;
}
if (m[nums[i]] > nums.size() / 2){
return nums[i];
}
}
return 0;
}