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

来源:互联网 发布:火箭vs雷霆数据 编辑:程序博客网 时间:2024/05/29 08:49

题目描述:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为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 状态:答案正确

阅读全文
0 0
原创粉丝点击