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 1:
Input:
[3,2,3]
Output:
3
Example 2:
Input:
[2,2,1,1,1,2,2]
Output:
2 题意:找出数组中个数超过一半的值 分析:通过标记或者排序很容易得到结果;这里主要用位运算的思想来计算结果。 这些数都在int范围内,所以外层循环for(int i=0;i<32;i++) 来枚举每一个二进制位,二进制位要么为0,要么为1, 如果该二进制位1的数量大于0的数量,那么res|=(1<<i),表示从右往左的第i+1位数置为1,最终res即为所求。
class Solution {
public:
int majorityElement(vector<int>& nums) {
int res=0;
for(int i=0; i<32; i++) {
int ones=0;
for(auto x: nums) {
ones+=((x>>i)&1);
}
if(ones>nums.size()-ones) {
res|=(1<<i);
}
}
return res;
}
};