1. 程式人生 > >【騰訊】微信紅包

【騰訊】微信紅包

題目描述

春節期間小明使用微信收到很多個紅包,非常開心。在檢視領取紅包記錄時發現,某個紅包金額出現的次數超過了紅包總數的一半。請幫小明找到該紅包金額。寫出具體演算法思路和程式碼實現,要求演算法儘可能高效。

給定一個紅包的金額陣列gifts及它的大小n,請返回所求紅包的金額。

若沒有金額超過總數的一半,返回0。

測試樣例:

[1,2,3,2,2],5
返回:2

 

class Gift {
public:
    int getValue(vector<int> gifts, int n) {
        // write code here
        int ans = gifts[0];
        int num = 1;
        for(int i = 1;i<n;i++)
        {
            if(num == 0)
            {
                num = 1;
                ans = gifts[i];
            }
            else
            {
                if(gifts[i] == ans)
                    num++;
                else
                    num--;
            }
        }
        
        num = 0;
        for(auto item:gifts)
        {
            if(item == ans)
                num++;
        }
        return num>(n/2)?ans:0;
    }
};