参加3月22日深圳尚游复试的时候被问到的问题。当时一直没有想出比较好的解决方法,只提出一个使用链表的解决方法。时间复杂度上会比这个算法慢很多,所以在此记录这个算法,以免遗忘。
void Random_m_n(int m, int n, int *arry)
//从1~m个数字中随机取出n个不相同的数字
{
srand((int)time(0));
//重置时间算子,用于产生随机数
int * data_m = new int[m];
for(int i = 0;i < m; i++)
{
data_m[i] = i+1;
}
//生成1~m个数字,存入数组中
while (n--)
{
int i = rand() % m;
//产生范围0~m-1内的一个随机数
arry[n] = data_m[i];
//拷贝到目标数组中
data_m[i] = data_m[m];
//把当前位置的数字替换成其他不重复数字
m--;
}
}