📅  最后修改于: 2023-12-03 15:10:44.234000             🧑  作者: Mango
本文介绍一种位运算的套路,用于解决查找多数元素问题。
给定一个长度为n的数组,找出出现次数超过n/2的元素。
示例1:
输入: [3,2,3]
输出: 3
示例2:
输入: [2,2,1,1,1,2,2]
输出: 2
假设有一个数出现次数大于n/2,那么它在二进制下的每一位都会出现次数大于n/2次。
我们可以依次考虑每一位,统计每一位上1出现的次数,如果大于n/2,则该位上一定是1,否则就是0。
最后我们将所有1统计起来,这个数就出来了。
public int majorityElement(int[] nums) {
int res = 0;
int n = nums.length;
for (int i = 0; i < 32; i++) {
int count = 0;
for (int j = 0; j < n; j++) {
if (((nums[j] >> i) & 1) == 1) {
count++;
}
}
if (count > n / 2) {
res |= (1 << i);
}
}
return res;
}
时间复杂度为O(32n),空间复杂度为O(1)。