class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
int length = numbers.size();
if(CheckInvalidArray(numbers, length)){
return 0;
}
int result = numbers[0];
int count = 1;
for(int i = 1; i < length; ++i){
if(numbers[i] == result)
count ++;
else if(count == 0){
result = numbers[i];
count = 1;
}else
count --;
}
if(!CheckMoreThanHalf(numbers, length, result)){
result = 0;
}
return result;
}
bool CheckInvalidArray(vector<int> &numbers, int length){
g_bInputInvalid = false;
if(numbers.empty() || length <= 0)
g_bInputInvalid = true;
return g_bInputInvalid;
}
bool CheckMoreThanHalf(vector<int> &numbers, int length, int number){
int times = 0;
for(int i=0;i<length;i++){
if(numbers[i] == number){
times ++;
}
}
bool isMoreThanHalf = true;
if(times * 2 <= length){
g_bInputInvalid = true;
isMoreThanHalf = false;
}
return isMoreThanHalf;
}
private:
bool g_bInputInvalid;
};
剑指offer——数组中出现次数超过一半的数字
最新推荐文章于 2025-01-03 10:49:45 发布
本文介绍了一种寻找数组中出现次数超过一半的元素的算法。该算法通过遍历数组并使用计数的方式找到可能的候选者,再进行二次验证确保其确实为众数。文章详细解释了算法的工作原理,并提供了完整的C++代码实现。


1915

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



