描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
思路:利用对组来存放,pair<int,int>(key,value),key用来存放当前遍历到的数,value用来存放该数出现的次数。
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers)
{
if (numbers.size() == 0)
return 0;
if(numbers.size()==1)
return 1;
multimap<int, int>m; //因为有重复的数出现,用multimap,所有的元素都是pair
for (int i = 0; i < numbers.size() - 1; i++)
{
int count = 1;
for (int j = i + 1; j < numbers.size(); j++) //统计当前numbers[i]出现的次数
{
if (numbers[i] == numbers[j])
count++;
}
m.insert(pair<int, int>(numbers[i], count)); // 将每个数及其出现的次数放入到对组中
}
int sum=0;
for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) // 遍历multimap容器
{
if ((it->second) > (numbers.size() / 2))
{
//如果容器中发现有一个数出现的次数超过数组长度的一半,则记录下这个数,并返回
sum= it->first;
break;
}
}
return sum;
}
};


京公网安备 11010502036488号