- Majority Element
中文English
Given an array of integers, the majority number is the number that occurs more than half of the size of the array. Find it.
Example
Example 1:
Input: [1, 1, 1, 1, 2, 2, 2]
Output: 1
Example 2:
Input: [1, 1, 1, 2, 2, 2, 2]
Output: 2
Challenge
O(n) time and O(1) extra space
Notice
You may assume that the array is non-empty and the majority number always exist in the array.
[1,1,1,1,2,2,2]
解法1: 网上有人叫这个“方法摩尔计数法”,只适用于过半数的情况。非常巧妙。我觉得有点象扫描线法。
代码如下:
class Solution {
public:
/*
* @param nums: a list of integers
* @return: find a majority number
*/
int majorityNumber(vector<int> &nums) {
int result = 0, count = 0;
for (auto i : nums) {
if (count == 0) {
result = i;
count++;
} else if (nums[i] == result) {
count++;
} else {
count--;
}
}
return result;
}
};
解法2:位运算。也很巧妙。
代码如下:
class Solution {
public:
/*
* @param nums: a list of integers
* @return: find a majority number
*/
int majorityNumber(vector<int> &nums) {
int N = nums.size();
int result = 0;
for (int i = 0; i < 32; ++i) {
int count = 0;
for (auto n : nums) {
int digit = (n >> i) & 0x1;
if (digit == 1) count++;
}
if (count > N / 2) result |= (0x1 << i);
}
return result;
}
};