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

// ConsoleApplication3.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <numeric>
#include<string>
#include<limits>
#include<stack>

using namespace std;
	struct Giftt
	{
		int money;
		int num;
	};

class Gift {
public:
	int getValue(vector<int> gifts, int n) {
		
		vector<Giftt*> giftVec;
		
		int getMoney = -1;
		for (int i = 0; i < gifts.size(); i++)
		{
			bool getflag = false;

			for (int j = 0; j < giftVec.size(); j++)
			{
				
				if (gifts[i] == (giftVec[j]->money))
				{
					getflag == true;
					(giftVec[j]->num)++;
					if ((giftVec[j]->num)>(n / 2 ))
					{
						 	getMoney = j;
						
					}
					break;
				
				}
			}
			
			if (getMoney != -1)
			{
				break;
			}
			if (getflag == false)
			{
				Giftt *fg = new Giftt;
				fg->money = gifts[i];
				fg->num=1;
				giftVec.push_back(fg);
			}
		}
		if (getMoney == -1) return 0;
		else return giftVec[getMoney]->money;
	}
};

int main() {
	
	vector<int> gifts = { 1,2,3,2,2 };
	Gift gg;
	cout << gg.getValue(gifts, 5) << endl;
	return 0;

}
posted @ 2017-03-03 17:11  wdan2016  阅读(1305)  评论(0编辑  收藏  举报