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——数组中出现次数超过一半的数字
最新推荐文章于 2024-03-28 11:47:36 发布