数组中出现次数超过一半的数字

数组中出现次数超过一半的数字

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;
    }
};
全部评论

相关推荐

死在JAVA的王小美:哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,我也是,让我免了一轮,但是硬气拒绝了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务