腾讯 微信红包 模拟

题目描述

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

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

若没有金额超过总数的一半,返回0。

测试样例:

[1,2,3,2,2],5
返回:2
class Gift {
public:
    int getValue(vector<int> gifts, int n) {
        // write code here
        int cnt=1;
        int num=gifts[0];
        for(int i=1;i<n;++i)
        {
            if(num==gifts[i])
            {
                cnt++;
            }else 
            {
                if(cnt>0)
                {
                    cnt--;
                }else 
                {
                    cnt++;
                    num=gifts[i];
                }
            }
        }
        //if(cnt==0 || cnt==1)return 0;
        //if((cnt==1)) return 0;
        //else return num;
        int size=0;
        for(int i=0;i<n;++i)
        {
            if(num==gifts[i]) size++;
        }
        return ((size>(n/2))?num:0);
    }
};
/*
class Gift {
public:
    int getValue(vector<int> gifts, int n) {
        // write code here
        for(int i=0;i<n-1;++i)
        {
            for(int j=0;j<n-i-1;++j)
            {
                if(gifts[j]<gifts[j+1])
                {
                    int temp=gifts[j];
                    gifts[j]=gifts[j+1];
                    gifts[j+1]=temp;
                }
            }
        }
        return gifts[n/2];
    }
};

*/
Last modification:January 11th, 2020 at 10:39 pm
如果觉得我的文章对你有用,请随意赞赏