《剑指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.
代码:
输出结果: 运行时间: 1 ms 占用内存:496K 状态:答案正确
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为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 状态:答案正确
相关文章推荐
- 剑指offer第二十八题【数组中出现次数超过一半的数字】c++实现
- 剑指offer - 数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字——剑指offer
- 剑指offer-面试题29-数组中出现次数超过一半的数字
- 剑指Offer面试题29:数组中出现次数超过一半的数字 Java实现
- 剑指offer(25)-数组中出现次数超过一半的数字
- 《剑指offer》——数组中出现次数超过一半的数字
- 剑指Offer(java版):数组中出现次数超过一半的数字
- 剑指Offer面试题29(java版):数组中出现次数超过一半的数字
- 剑指offer——面试题29:数组中出现次数超过一半的数字
- 剑指offer:数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字||剑指offer
- 剑指Offer——(28)数组中出现次数超过一半的数字
- 剑指offer-面试题29-数组中出现次数超过一半的数字
- 剑指offer系列源码-数组中出现次数超过一半的数字
- 《剑指offer》-数组中出现次数超过一半的数字
- [置顶] 剑指offer:第29题寻找数组中出现次数超过一半的数字
- 剑指Offer——数组中出现次数超过一半的数字
- 剑指offer系列之27:数组中出现次数超过一半的数字
- 剑指Offer(39)数组中出现次数超过一半的数字