1. 程式人生 > >查詢陣列中的眾數

查詢陣列中的眾數

查詢陣列中出現次數最多的數

示例一

int most_(vector<int> arr) {
	int len = arr.size();
	vector<int> tmp(len, 0);
	vector<int>::iterator it = arr.begin();
	while (it != arr.end()) {
		tmp[*it++]++;
	}
	return max_element(tmp.begin(), tmp.end()) - tmp.begin();
}

示例二

/*查詢一個眾數*/
typedef pair<int, int> Int_Pair;
bool cmp_by_value(const Int_Pair& a, const Int_Pair& b) {
	return a.second < b.second;
}
int most_2(vector<int> arr) {
	hash_map<int, int> MyMap;
	hash_map<int, int>::iterator it1;
	for (int i = 0; i < arr.size(); i++) {
		/*如果key已存在, 則將出現次數加一*/
		if ((it1 = MyMap.find(arr[i])) != MyMap.end()) {
			it1->second++;
		}else {
		/*如果key不存在,則入map,出現次數為1*/
			MyMap.insert(Int_Pair(arr[i], 1));
		}
	}
	it1 = max_element(MyMap.begin(), MyMap.end(), cmp_by_value);
	return it1->first;
}
/*查找出現次數最多的所有眾數*/
typedef pair<int, int> Int_Pair;
struct CmpByValue {
	bool operator()(const Int_Pair& a, const Int_Pair& b) {
		return a.second > b.second;
	}
};
vector<int> most_2(vector<int> arr) {
	hash_map<int, int> MyMap;
	hash_map<int, int>::iterator it1;
	for (int i = 0; i < arr.size(); i++) {
		if ((it1 = MyMap.find(arr[i])) != MyMap.end()) {
			it1->second++;
		}else {
			MyMap.insert(Int_Pair(arr[i], 1));
		}
	}
	vector<Int_Pair> vec(MyMap.begin(), MyMap.end());
	vector<int> mostNum;
	/*自定義排序規則,按value降序*/
	sort(vec.begin(), vec.end(), CmpByValue());
	vector<Int_Pair>::iterator it2 = vec.begin();
	int maxCount = it2->second;
	for (; it2 != vec.end(); it2++) {
		if (maxCount != it2->second) break;
		mostNum.push_back(it2->first);
	}
	return mostNum;
}