数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2
限制:
1 <= 数组长度 <= 50000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public int majorityElement(int[] nums) {
// i++:是先把i拿出来使用,然后再+1;
// ++i :是先把i+1,然后再拿出来使用;
if(nums.length == 0){ return -1;}
int res = 0;
//循环2进制每位元素
for(int i = 0; i < 32; i++){
int count = 0;
//循环数组中每个数字,统计当前位1的数量是否大于半数,大于半数则1就是当前位数字
for(int num : nums){
count += (num >> i) & 1;
}
//注意这里需要左移后累加
if(count > nums.length/2){
res += 1 << i;
}
}
return res;
}
}