您的位置:首页 > 移动开发

Data Structure Array: Given an array of of size n and a number k, find all elements that appear more than n/k times

2014-04-10 04:21 776 查看
http://www.geeksforgeeks.org/given-an-array-of-of-size-n-finds-all-the-elements-that-appear-more-than-nk-times/

这一题如果没空间要求就没那么麻烦了

#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <stack>
#include <string>
#include <fstream>
#include <map>
using namespace std;

void more(int arr[], int n, int k) {
map<int, int> S;
for (int i = 0; i < n; i++) {
if (S.find(arr[i]) != S.end()) S[arr[i]]++;
else if (S.size() == k) {
for (map<int, int>::iterator it = S.begin(); it != S.end(); it++) {
if (it->second == 1) S.erase(it->first);
else it->second--;
}
}
else S[arr[i]] = 1;
}
for (map<int, int>::iterator it = S.begin(); it != S.end(); it++) {
int tmp = 0;
for (int i = 0; i < n; i++) {
if (arr[i] == it->first) tmp++;
}
if (tmp > n / k) cout << it->first << " ";
}
}

int main() {
int arr[7] = {4, 5, 6, 7, 8, 4, 4};
more(arr, 7, 3);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐