数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字
int MoreThanHalfNum_Solution(vector<int> numbers) {
if(numbers.empty()) return 0;
int times=1;
int len=numbers.size();
int result=numbers[0];
for(int i=1;i<len;i++)
{
if(result!=numbers[i])
{
times--;
}
else
times++;
if(times==0)
{
result=numbers[i];
times=1;
}
}
int count=0; // 出现次数
for(int i=0;i<numbers.size();++i)
{
if(numbers[i]==result)
++count;
}
return (count>numbers.size()/2) ? result : 0;
}
int MoreThanHalfNum_Solution(vector<int> numbers)
{
// 因为用到了sort,时间复杂度O(NlogN),并非最优
if(numbers.empty()) return 0;
sort(numbers.begin(),numbers.end()); // 排序,取数组中间那个数
int middle = numbers[numbers.size()/2];
int count=0; // 出现次数
for(int i=0;i<numbers.size();++i)
{
if(numbers[i]==middle) ++count;
}
return (count>numbers.size()/2) ? middle : 0;
}