除了代码,重要的是分析。。我实在想不明白这个了,来求大神们帮帮忙
6条回答 默认 最新
- threenewbee 2017-11-05 13:20关注
有三个常见的思路
(1)生成一个包含这个范围(假设范围是2-6)的数组,内容是连续序数。比如 [2,3,4,5,6]
再生成一个和它相同长度,但是里面存随机数的数组,比如[432,541,406,67,190] (实际上随机数的范围可以是1~2^31-1)
对这个数组排序,并且按照原来的顺序得到原始下标,比如排序后[67,190,406,432,541],对应原来下标是[3,4,2,0,1]也就是原来67下标是3,现在第一个元素就是3,别的类似。
最后,用这个打乱的下标,对你原始数据索引,比如3,那么就找到 [2,3,4,5,6] 的下标3的数字,也就是5,以此类推。得到[5,6,4,2,3]
[5,6,4,2,3]就是对[2,3,4,5,6]也就是你的范围打乱的结果,你要n个数,就从中依次取n个就可以了。
这个办法叫做洗牌算法,适合n和你的范围相同或者很接近的时候解决 3无用
悬赏问题
- ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
- ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
- ¥15 onvif+openssl,vs2022编译openssl64
- ¥15 iOS 自定义输入法-第三方输入法
- ¥15 很想要一个很好的答案或提示
- ¥15 扫描项目中发现AndroidOS.Agent、Android/SmsThief.LI!tr
- ¥15 怀疑手机被监控,请问怎么解决和防止
- ¥15 Qt下使用tcp获取数据的详细操作
- ¥15 idea右下角设置编码是灰色的
- ¥15 全志H618ROM新增分区