Problem :
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.
Example:
**
Algorithm:
**
算法1:
排序然后去序列的n/2项,时间复杂度为排序算法的时间复杂度 O(nlogn)
算法2:
Moore voting algorithm:因为我们要找的数N有大于n/2,那么其余的数的个数总和比N小,所以只要把我们遇到的两个不同的数都删去,最后剩下来的就是N了;时间复杂度O(n);
**
Code:
算法一:
class Solution {
public:
int majorityElement(vector<int> &num) {
sort(num.begin(),num.end());
int n=num.size();
return num[n/2];
}
};
算法二:
class Solution {
public:
int majorityElement(vector<int> &num) {
int n=0;
int count=0;
for(int i=0;i<num.size();i++)
{
if(count==0)
{
count++;
n=num[i];
}
else
{
if(n==num[i])
count++;
else
count--;
}
}
return n;
}
};