题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
这道题很简单,可是我却做了很久,中间想到了用multimap记录键值对(以数组的元素做键,元素出现的次数做值),然后合并键,可是multimap好像没有这样的方法。算了,我还是做一个快排吧。注意,记得判断中位数出现的次数是否过半。
// 26.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
#include
第二次做:
用的map,简单多了
// 数组中出现次数超过一半的数字.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
第三次做:
class Solution {
public:
int MoreThanHalfNum_Solution(vector numbers) {
if ( numbers.empty() == true ) return 0 ;
map m ;
for ( vector::iterator iter = numbers.begin(); iter != numbers.end(); ++ iter ) {
m[*iter] ++ ;
}
for ( map::iterator iter = m.begin(); iter != m.end(); ++ iter ) {
if ( iter->second > ( numbers.size() / 2) ) return iter->first ;
}
return 0 ;
}
};