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.
解题思想:
与137 Single Number 基本是相近的解题方式。
使用位运算的思想。将每一个INT看作为32位的bit.
将所有相同位置的bit相加以后,如过该位的和大于数组大小的一半
那么就可以判断主元素在该位置的一定是1了。
class Solution {
public:
int majorityElement(vector<int>& nums) {
int result=0;
int temp[32]={0};
int halfsize=nums.size()/2;
for(vector<int>::iterator it=nums.begin();it!=nums.end();it++){
int t = *it;
int sign = t > 0 ? 0:1; //判断用例的符号
for (int i = 0; i<32; i++){
if (t == 0 && sign == 0) { //正数的右移终点
break;
}
else if (t == 0xffffffff && sign == 1){ //负数的右移终点
temp[i] = (temp[i]+1);
}
else{
temp[i] = (temp[i] + (t & 0x1));
t = t >> 1;
}
}
}
for (int j = 31; j >= 0; j--){ //整数数组化为整数
result = result << 1;
if(temp[j]>halfsize){
result = 1 | result;
}
}
return result;
}
};