您的位置:首页 > 其它

【LeetCode】169. Majority Element

2016-01-31 11:36 465 查看
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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: