您的位置:首页 > Web前端

《剑指Offer》数组中出现次数超过一半的数字

2017-07-17 00:14 218 查看
题目描述:

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

思路:将这些数放到map中,first值为出现的数,second的值为出现次数,看最大的second值是否大于mid,大于则返回这个first;否则返回0.

代码:

class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
unordered_map<int,int> res;
int len = numbers.size();
int mid = len/2;// 一半数大小
for(int i = 0;i < len;++i){
if(res.count(numbers[i])){//如果原来有这个数,这个数对应的次数加1
res[numbers[i]]+=1;
}
else{//如果原来没有这个数,插入,出现次数置为1
res.insert(make_pair(numbers[i],1));
}
}
for(unordered_map<int,int>::iterator iter = res.begin();iter!=res.end();++iter){
if(iter->second > mid){//遍历map,如果second值也就是出现次数大于mid,返回first,也就是这个数
return iter->first;
}
}
return 0;//否则返回0
}
};


输出结果: 运行时间: 1 ms 占用内存:496K 状态:答案正确
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: