题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
基本思路是比较计数,依次从头遍历这个数组,当发现有和这个元素相等的时候,计数器++,当发现计数器大于一半的时候,表示找到了,立刻返回这个数,否则继续遍历。无解的时候情况最差,最差时间复杂度为O(n^2),当存在解的时候,会比较快跳出循环(取决于解的位置,最差为n*n/2),最快为O(n)。
代码:
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
int count=0,max=0;
int i=0;
for(i=0;i<numbers.size();i++)
{
count=0;
for(int j=0;j<numbers.size();j++)
{
if(numbers[i] == numbers[j])
{
count++;
if(count>(numbers.size())/2)
break;
}
}
if(count>max)
max=count;
if(max>(numbers.size())/2)
break;
else
continue;
}
if(max>(numbers.size())/2)
return numbers[i];
else
return 0;
}
};