题目:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。若不存在该数字,则输出0.
解法:
1、利用阵地法思想。
2、以数组第一个数上阵地,阵地上的数字记为res,把阵地上的数字数量记为count,
3、从array[2,....n-1]开始逐一上数来PK,若两个数一样,count++,不一样就--,
4、出现count==0 的情况,令新来的为阵地上的数字res。
5、直到最后,若存在一个数字A出现次数超过数组长度的一半,那么最后一个数字一定为A。
代码如下:
int MoreThanHalfNum_Solution(vector<int> numbers) {
if(numbers.size()==0 ||numbers.empty())
return 0;
int n = numbers.size();
int res = numbers[0];
int count =1;
for(int i =1;i<n;i++)
{
if(count==0)
{
res = numbers[i];
count =1;
}
else
{
if(numbers[i]==res)
count++;
else
count--;
}
}
count =0;
for(int i =0;i<n;i++)
{
if(numbers[i]== res)
count++;
}
return count>n/2?res:0;
}