您的位置:首页 > 编程语言 > C语言/C++

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

2017-10-01 22:55 309 查看
class Solution {//经典问题,利用两个辅助变量,一个记录数字出现次数,一个记录数字。当后面的数字与其相等次数加1,不同减1,当次数为0时,记录数字就换成此时的数字
最后剩下的数字有可能是所求,但是不一定,还要重新遍历一次数组,查看此值出现的次数是否超过数组长度一半。
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
if(numbers.empty())
return 0;

int index=1,key=numbers[0],count=0;
for(int i=1;i<numbers.size();i++)
{
if(numbers[i]==key)
index++;
else
{
if(index==0)
{
key=numbers[i];
index=1;
}
else
index--;
}
}
for(int i=0;i<numbers.size();i++)
if(numbers[i]==key)
count++;
if(count>numbers.size()/2)
return key;
else
return 0;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 算法
相关文章推荐