#include <iostream>
#include <stdio.h>
#include <vector>
#include <bitset>
using namespace std;
/*
问题:给定一个数组,包含1到N的整数,N最大为32000,数组可能包含含有重复的值,且N的取值不定。若只有4KB内存可用,该如何打印数组中所有重复的元素
分析:每次碰到内存少或大数据 一定要想到;1)分组,2)位图,3)批处理
书上的解法:4KB = 32* 1024 bit 大于32000,所以可以直接用位图处理
输入:
5(N) 7(实际输入元素个数)
1 2 3 4 5 3 5
输出:
3 5
关键:
1 每次碰到内存少或大数据 一定要想到;1)分组,2)位图,3)批处理
书上的解法:4KB = 32* 1024 bit 大于32000,所以可以直接用位图处理
2 mBitset.reset();//位向量设置每个位为0
*/
void process()
{
int N , inputNum;
int value;
const int MAXSIZE = 32000;
bitset<MAXSIZE> mBitset;
vector<int> repeatedNums;
while(cin >> N >> inputNum)
{
mBitset.reset();//位向量设置每个位为0
for(int i = 0 ; i < inputNum ; i++)
{
cin >> value;
//将数据保存到位图中
int bitValue = mBitset.at(value);
if(1 == bitValue)
{
repeatedNums.push_back(value);
}
else
{
mBitset.at(value) = 1;
}
}
//输出结果
int size = repeatedNums.size();
for(int i = 0 ; i < size ; i++)
{
cout << repeatedNums.at(i) << " ";
}
cout << endl;
}
}
int main(int argc, char* argv[])
{
process();
getchar();
return 0;
}
程序员面试金典: 9.10 扩展性与存储限制 10.4限定内存下寻找重复的数
最新推荐文章于 2021-01-14 15:47:23 发布