数组中出现次数超过一半的数字
数组中出现次数超过一半的数字
http://www.nowcoder.com/questionTerminal/e8a1b01a2df14cb2b228b30ee6a92163
描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为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; } };