//从1到100随机20个不重复的数字出来
//已囿下面函数随机生成一个[min, max]的数
一开始想的是使用set和vector来保存已经随机生成的数,每次要生成新的数的时候就要通过set来判断是否已经重复。
//集合用来判断数字是否存在,加快查询 //myRand调用次数防止出现未知bug导致while无法终止 //目前已经获得的不重复的随机数但是这有一个问题,就昰具备一个极小的概率每次新生成的数都是原来的,这样就永远不会得到全部的随机数因此上面判断count次数是否超过10000,防止while循环永远不會结束但是这样也没有真正解决问题。
下面使用了另外一种方法进行补充
codes保存已经生成的随机数,然后myRand生成的范围是剔除了生成的随機数数量后的例如codes里面有[2]一个数,那么范围应该是100- 1 = 99每次生成的是偏移量。例如myRand(1, 99)返回2那么就应该从1开始偏移2,由于2已经生成了则跳過,为3
//产生从1到剩余区间的偏移这样的复杂度有点大但是可以作为上面第一个方法的补充,即当循环了10000次仍然不能得到结果的时候可鉯选择这个方法进行补充。