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.
题目大意:
找出数组中超过一半的数。
C++实现代码:
#include<iostream> #include<vector> using namespace std; class Solution { public: int majorityElement(vector<int> &num) { if(num.empty()) return -1; int n=num.size(); int i; int index=0; int count=1; for(i=1;i<n;i++) { if(num[i]==num[index]) { count++; } else count--; if(count<0) { count=1; index=i; } } return num[index]; } }; int main() { vector<int> num={3,3,3,3,3,3,1,2,4,5,3,45,2,54}; Solution s; cout<<s.majorityElement(num)<<endl; }
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
int majorityElement(vector<int> &num) {
if(num.empty())
return -1;
int n=num.size();
int major=num[0];
int i;
int count=1;
for(i=1;i<n;i++)
{
if(num[i]==major)
count++;
else
count--;
if(count<0)
{
count=1;
major=num[i];
}
}
return major;
}
};
int main()
{
vector<int> num={3,3,3,3,3,3,1,2,5,3,45,2,54};
Solution s;
cout<<s.majorityElement(num)<<endl;
}
如果要找当好出现一半的数呢?此时这个数可能是通过上面的办法找到的那个数,也可能是最后一个数,因此,只需要再次遍历数组,找出与最后一个数相等的数的个数,如果小于一半,那么上面找出的数就是刚好出现一半的数,否则最后一个数是刚好出现一半的数。