配列内の衆数の検索
配列内で最も多く発生する数を検索
例1
例2
例1
int most_(vector arr) {
int len = arr.size();
vector tmp(len, 0);
vector::iterator it = arr.begin();
while (it != arr.end()) {
tmp[*it++]++;
}
return max_element(tmp.begin(), tmp.end()) - tmp.begin();
}
例2
/* */
typedef pair Int_Pair;
bool cmp_by_value(const Int_Pair& a, const Int_Pair& b) {
return a.second < b.second;
}
int most_2(vector arr) {
hash_map MyMap;
hash_map::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_Pair;
struct CmpByValue {
bool operator()(const Int_Pair& a, const Int_Pair& b) {
return a.second > b.second;
}
};
vector most_2(vector arr) {
hash_map MyMap;
hash_map::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 vec(MyMap.begin(), MyMap.end());
vector mostNum;
/* , value */
sort(vec.begin(), vec.end(), CmpByValue());
vector::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;
}