面试题 17.10. Find Majority Element LCCI
A majority element is an element that makes up more than half of the items in an array. Given a positive integers array, find the majority element. If there is no majority element, return -1. Do this in O(N) time and O(1) space.
Example 1:
Input: [1,2,5,9,5,9,5,5,5]
Output: 5
Example 2:
Input: [3,2]
Output: -1
Example 3:
Input: [2,2,1,1,1,2,2]
Output: 2
思路与代码
其实就是两个元素一 一抵消,数量多的就会留下来。
class Solution {
public:
int majorityElement(vector<int>& nums) {
int candidate = -1;
int count = 0;
for (int& num : nums) {
if (count == 0) {
candidate = num;
}
if (num == candidate) {
count++;
}
else {
count--;
}
}
count=0;
int length = nums.size();
for (int& num : nums) {
if (num == candidate) {
count++;
}
}
return count * 2 > length ? candidate : -1;
}
};