我想用 1 到 N 之间的随机值填充数组“a”(没有重复值)。假设 randInt(i, j) 的 Big-O 为 O(1),并且该函数生成从 i 到 j 的随机值。
输出示例如下:
{1,2,3,4,5} 或 {2,3,1,4,5} 或 {5,4,2,1,3} 但不是 {1,2,1,3,4}
#include<set>
using std::set;
set<int> S;// space O(N) ?
int a[N]; // space O(N)
int i = 0; // space O(1)
do {
int val = randInt(1,N); //space O(1), time O(1) variable val is created many times ?
if (S.find(val) != S.end()) { //time O(log N)?
a[i] = val; // time O(1)
i++; // time O(1)
S.insert(val); // …Run Code Online (Sandbox Code Playgroud)