(面试)将1到100的随机数插入到长度为100的数组中,保证不会有重复元素
题目:将1到100的随机数插入到长度为100的数组中,保证不会有重复元素
---方案一:使用set集合,可以保证set中不会有重复元素,当set大小为100时,退出循环;
获取1--100随机数方法有 : int a = (int)(Math.random()*100+1); 或 int a = new Random().nextInt(100);
---方案二:每次添加随机数到数组时,都检测原数组是否已经存在此元素
---方案三:生成1--100的链表LinkedList(也可以用数组,但是删除操作麻烦,不如链表),随机数范围是1--99,指定的是链表的元素索引位置;
这样每次生成一个随机索引对应的元素,就放到一个100长度的数组中;并且从原来的链表中除去随机索引对应的元素 && 同时随机数生成范围改为1--98;
以此类推,直到目标数组元素个数为100为止。
比较分析:通常方案1,2都不能确定程序什么时候退出,因为要等随机到1--100中所有的元素才能满足退出,导致的问题可能是执行好久,
并且不可预知、不可控。
方案3很好,能够快速执行,因为它每次去一个随机数,就从原来的列表中删除且随机返回也相应减一;