[编程题]微信红包

[编程题]微信红包

春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。

给定一个红包的金额数组gifts及它的大小n,请返回所求红包的金额。

测试样例:
[1,2,3,2,2],5
返回:2
class Gift {
public:
    int getValue(vector<int> gifts, int n) {
        // write code here
        if(gifts.size()<0) return 0;
        int num=gifts[0],times=1;
        for(int i=1;i<gifts.size();i++)
            {
            if(num!=gifts[i])
                {
                times--;
                if(times<0)
                    {
                    num=gifts[i];
                    times=1;
                }
            }
            else times++;
        }
        if(times>0) return num;
        else return 0;
    }
};

这种解法只能确定有大于一半的数时,才能用。下面这种就不用考虑了。

class Gift {
public:
    int getValue(vector<int> gifts, int n) {
        // write code here
        map<int ,int> gift;
        for(int i=0;i<gifts.size();i++)
            gift[gifts[i]]++;
        for(map<int,int>::iterator start=gift.begin();start!=gift.end();start++)
            if(start->second>n/2) return start->first;
            return 0;
    }
   
};

 

你可能感兴趣的:([编程题]微信红包)