参加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--; } }