您的位置:首页 > 其它

数组中出现次数超过一半的数字

2019-09-18 22:15 10 查看

题目描述

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。   有一个很容易理解的方法就是直接排序,如果该数字存在则中间的位置就是该数字。时间复杂度为O(nlgn) 这次主要谈一谈第二种方法。 遍历整个数组,如果下一个值与当前值相等,则计数器+1,若不等,则计数器-1,若计数器为0,则用检测的值赋值给当前值,计数器设1。这样如果该数存在,则最终得到的值就是数组中出现次数最多的值。最后遍历一次数组比对该数的次数若符合要求则为所求值,否则返回0. 代码实现:
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
int p = numbers[0];
int count = 0;
for(int i = 0; i < numbers.size(); ++i){
if(!count){
p = numbers[i];
count = 1;
}else if(p - numbers[i]){
--count;
}else{
++count;
}
}
count = 0;
for(int i = 0; i < numbers.size(); ++i){
if(p == numbers[i]){
++count;
}
}
if(count <= numbers.size()/2){
p = 0;
}
return p;
}
};

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: