#if __GNUC__>2
#include <ext/hash_set>
#include <ext/hash_map>
using namespace __gnu_cxx;
#else
#include <hash_set>
#include <hash_map>
using namespace stdext;
#endif
#include <iostream>
bool findDuplicatesWithinKDistrance(const int *arr, int arrSize, int k)
{
	hash_set<int> set;
	for (int i = 0; i<arrSize; i++)
	{
		if (set.find(arr[i]) != set.end())
			return true;
		set.insert(arr[i]);
		//只比较当前元素与其前面的k个元素,更前面的则删除之,因为距离已经大于k了。
		if (i >= k)
			set.erase(arr[i - k]);
	}
	return false;
}
int main()
{
	const int arrSize = 7;
	const int k = 3;
	int arr[arrSize] = { 11, 55, 22, 44, 22, 55, 77 };
	if (findDuplicatesWithinKDistrance(arr, arrSize, k))
		std::cout << "exist duplicates" << std::endl;
	else
		std::cout << "not exist duplicates" << std::endl;
	return 1;
}输出:原文:http://blog.csdn.net/shltsh/article/details/46485609