如何生成指定范围内的随机数,要求稳定的时间复杂度?

首先看到这个题目,很多人的第一感觉就是使用 Random 随机类,循环生成随机数。也就是我原来写过的一篇文章java之生成不重复的随机数里面的代码,如下图:

这段代码可以生成size个begin到maxNum范围内的随机数,并且不会重复。看起来似乎没有什么问题,仔细审题就会发现题目是要求稳定的时间复杂度的。那么上图中的代码的隐患就在于Random 中的 nextInt 方法,如果它循环时多次产生重复的随机数,就会导致它的时间复杂度不是稳定的。

现在问题发现了,那么我们如何解决呢?很显然,nextInt 方法是jdk中的代码,而且它作为随机数的生成,从概率上讲,循环时多次生成相同的随机数理论上来说也是合理的。所以我们必须要换一种思维方式,不能以随机数为主,只能以随机数为辅。

1.随机打乱法

public class TestRandom {
    public static void main(String[] args) {
        System.out.println(getRandomNum(5,100));
    }
    public static List<Integer> getRandomNum(int start, int end){
        List<Integer> list=new ArrayList<>();
        for(int i
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值