感觉题目有一定难度
刚开始抱着两种思路: 先排序,然后顺序查找一次就好
不排序,顺序查找,遇到一对不相同的就去掉,想去掉主元素,一定需要一个非主元素,主元素很多,就能找出来了
结果第一种超时,第二种死活过不了....
最后采用了按位做的方式,每位只可能是0或1,统计出现次数,肯定是多的那个,这样循环32n次就行了,结果过了,但是很慢
class Solution {
public:
int majorityElement(vector<int> &num) {
int major=0,bit=1,temp,one=0,zero=0;
for(int i=0;i<32;i++){
for(int j=0;j<num.size();j++){
((num[j]>>i)&1)?one++:zero++;
}
if(one>num.size()/2) major+=bit;
bit*=2;
one = 0;zero = 0;
}
return major;
}
};