Question:
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.
Solution:
书上习题也做过。由于这道题保证了一定会有解(出现次数大于n/2的数),解法也可以更简单一些。
大致的思路是投票法,因为一定会有一个数出现次数大于n/2,因此这个数和别的数一一组合后,肯定会多出来一些数是只能和自己组合的(多出来1个或多个)。那么,维护一个计数器,就让他们两两组合,遇到是自己的数就+1,遇到是别的数就-1,表示该数和这个别的数相互组合抵消(也可以反过来说这个别的数和目前的数抵消),最后剩下的数就是解。
class Solution {
public:
int majorityElement(vector<int>& nums) {
int count = 1, ret = nums[0];
for (int i : nums) {
if (i != ret)
count--;
else
count++;
if (count == 0) {
count = 1;
ret = i;
}
}
return ret;
}
};