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