题目描述
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例:
输入: [3,2,3]
输出: 3
参考代码
class Solution {
public:
int majorityElement(vector<int> &numbers) {
int length = numbers.size();
if(length == 0)
return 0;
int resNum = numbers[0];
int mCount = 1;
for(int i = 1; i < length; i++){
if(numbers[i] == resNum)
mCount++;
else
mCount--;
if(mCount == 0){
resNum = numbers[i];
mCount = 1;
}
}
if(verifyNum(numbers, length, resNum))
return resNum;
return 0;
}
bool verifyNum(vector<int> numbers, int length, int resNum){
vector<int>::iterator iter;
int sum = 0;
for(iter = numbers.begin(); iter < numbers.end(); iter++){
if(*iter == resNum)
sum++;
}
if(sum > length/2)
return true;
else
return false;
}
};
本文深入探讨了在数组中寻找出现次数超过一半的多数元素的高效算法。通过具体示例和代码实现,详细讲解了Boyer-Moore投票算法的工作原理,以及如何验证候选多数元素的有效性。
656

被折叠的 条评论
为什么被折叠?



