(面试)将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很好,能够快速执行,因为它每次去一个随机数,就从原来的列表中删除且随机返回也相应减一;

                    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值