查詢陣列中的眾數
阿新 • • 發佈:2018-12-13
查詢陣列中出現次數最多的數
示例一
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; }