在一个数组中随机选择若干不重复的元素

本文介绍了一种从65535个端口中随机选取且不重复的方法,通过使用数组记录已选端口并逐步缩小选择范围实现线性时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问:

 总共65535个端口,每次随机取一个,怎么保证每次取得和以前不一样?如果取了6万多次,后面的很容易重复,怎么优化?

答:

先用一个长度为65535的数组装有序装下1~65535。用一个变量length标记其数组长度,初始值为65535,用随机函数在[0,length)产生一个随机数,作为选取元素的下标,在抽取一个元素之后,将该元素与数组末端的最后一个元素交换,然后将数组最后一个元素扔掉,这里的扔掉,只需要将标记数组的长度的变量length-1就可以。随着比较的进行,每次被抽取的元素都被交换到了数组末端,再被扔掉,数组长度也越来越短。显然这是一个线性时间复杂度的算法。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值