K个不重复随机数的生成

std::vector<int> Random(std::vector<int> a, int K)
{
	std::vector<int> r;
	std::random_device generator;
	int N = a.size();
	int c = N - 1;
	while (c >= N - K)
	{
		std::uniform_int_distribution<int> dist(0, c);
		auto d = dist(generator);
		r.push_back(a[d]);
		std::swap(a[d], a);
		c--;
	}
	return r;
}

需要注意的问题:

第9行随机数是闭区间;

第9行区间的上界是递减的;

第9行区间的上界是从N-1开始而不是K-1开始(这点有可能不小心会写成K-1);

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注

16 − 3 =