题目描述
给定一个整型数组,找出主元素,它在数组中的出现次数大于数组元素个数的二分之一。
思路
从第一个元素开始统计出现次数,如果当前元素在长度为k的子数组中出现的次数小于k/2,则抛弃此元素,从下一个元素继续统计。
C++代码
class Solution {
public:
/**
* @param nums: a list of integers
* @return: find a majority number
*/
int majorityNumber(vector<int> &nums) {
// write your code here
const int numsLen = nums.size();
if (numsLen == 1) {
return nums[0];
} else {
int count = 1;
int result = nums[0];
for (int i = 1; i < numsLen; ++i) {
if (nums[i] == result) {
++count;
} else {
if (count * 2 < i + 1) {
result = nums[i];
}
}
}
return result;
}
}
};