题解 | #创建数组#

无重复数组

http://www.nowcoder.com/practice/d2fa3632268b41df9bc417b74802ad8c

一般思路,生成的随机数和数组验重,重复则重新生成随机数,这样造成很多无效循环,性能较差,分享一个性能为o(n)的思路:

  1. 生成一个全集数组
  2. 生成数组长度的随机数index
  3. 将该index对应元素添加到随机数组中
  4. 全集数组中删除生成的随机元素
  5. 循环2 3 4步骤
			const _getUniqueNums = (start,end,n) => {
                // 补全代码
                var arr = []
                var randomArr = []

                for (let index = 0; index < end - start + 1; index++) {
                    arr.push(start + index)
                }

                while (randomArr.length < n) {
                    var randomIndex = Math.floor(Math.random() * arr.length)
                    randomArr.push(arr[randomIndex])
                    arr.splice(randomIndex, 1)
                }

                return randomArr
            }
全部评论
妙啊
1 回复 分享
发布于 2022-02-25 20:54
for (let index = 0; index < end - start + 1; index++) { arr.push(start + index) }这一步算不算无效循环呢,假如需要产生1个随机数,范围是2-10,那还不如直接这样写更直接 while (arr.length < n) { let v = Math.floor(Math.random() * end+start) if (arr.indexOf(v) === -1) { arr.push(v) } }
1 回复 分享
发布于 2022-05-06 14:51
评论不上吗?抽签法很快,但是抽签桶很大抽的很少效率会低
点赞 回复 分享
发布于 2024-03-01 14:32 广东
呜呜呜,我看了十分钟才看懂这个写法,这就是大佬与菜鸡的区别嘛
点赞 回复 分享
发布于 2023-04-20 22:44 四川
太强了吧 什么脑子能想出这种写法 T_T
点赞 回复 分享
发布于 2023-01-31 10:01 浙江
牛逼啊
点赞 回复 分享
发布于 2022-11-05 16:21 江苏

相关推荐

2025-12-02 02:15
门头沟学院
最近菊厂陆续开了,极力劝退那些拿13级的985硕士,就13级那么点儿薪资,一线城市每个月到手1.8/7/6w,租房2k还是破烂,吃饭2k还是预制菜,买个1k衣服都是聚酯纤维破塑料,稍微出去浪一浪,能留1w就是万岁,要是再有个啥都想买的对象,一线工作一年难存10w。隔壁工地混泥土,钳工,焊工一天800+,还包吃包住。读书18年到985硕士出来就为了进厂螺丝工?还不如从8岁童工开始干活,别人读书完了你工龄18+,混不上领导也是个小头头了。当然专科进来正式工,od都行,一般本科进来13级也OK,毕竟22岁年纪摆在那个地方还不需要太花钱。读硕博的基本26岁,工作两年就要结婚的,兜里没几个崽,连彩礼都要信用贷。菊厂离职的不少,毕竟正常没人受得了9116(梗:再来一次911刷6)。为啥这时候劝?因为刚下班,因为国考刚完,省考下周,就是可惜选调只有当年应届能报。现在回想能拍断大腿。应届生真实好身份,错过这一次,选调,考公,考编,当老师,进医院,研究所,高校,央国企,基本都无缘了,就连报名资格都被剥夺了,可谓是被党和国家遗弃的废材,统称“社会上的”,扔到社会去流浪,被用坏了就扔医院,长期超负载使用,零件修不好基本可以扔火里回炉重造了。体制内奉行找体制内的,都是党和国家选的人才,智力不差,样貌不丑,身材端正,收入稳定,安居房政策福利待遇也OK。因公出行都是报销,周末顺带“游山玩水“,这种体制内单身资源但凡想找对象,去社会上随便吆喝一声都排队。观察一下,基本没什么公务员在相亲,因为早就被邻里邻居抢光了。
哈哈哈,你是老六:就这不去的人大把人干呢,现在不缺人干活,你不干大把干呢,还有那个说农民工赚钱的,那个800+我估计肯定也就那一段时间,哪有这么赚钱,还是一句话,要想存下钱必须花销极低,能省的就不花钱,工资要高点
点赞 评论 收藏
分享
评论
32
8
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务