洗牌算法详解_数据库洗牌算法

洗牌算法详解_数据库洗牌算法洗牌算法含义将数组中的数随机打乱,每次打乱后出现的概率应该是均等的。思路对于下标x而言,我们从[x,n−1]中随机出一个位置与x进行值交换,当所有位置都进行这样的处理后,我们便得到了一个公平的洗牌方案。代码实现intn=nums.length;Randomrandom=newRandom();for(inti=0;i<n;i++){//要交换数的下标intj=i+random.nextInt(n-i)

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

洗牌算法

含义

将数组中的数随机打乱,每次打乱后出现的概率应该是均等的。

思路

对于下标 x 而言,我们从 [x,n−1] 中随机出一个位置与 x 进行值交换,当所有位置都进行这样的处理后,我们便得到了一个公平的洗牌方案。

代码实现

int n = nums.length;
Random random = new Random();
for (int i = 0; i < n; i++) { 
   
    //要交换数的下标
    int j = i+random.nextInt(n-i)
    int tem = nums[i];
    nums[i] = nums[j];
    nums[j] =tem;
}
return nums;

例题

给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。

实现 Solution class:

    Solution(int[] nums) 使用整数数组 nums 初始化对象
    int[] reset() 重设数组到它的初始状态并返回
    int[] shuffle() 返回数组随机打乱后的结果
  • 代码实现
class Solution { 
   
    int[] nums;
    public Solution(int[] nums) { 
   
      this.nums = nums;
    }
    public int[] reset() { 
   
      return nums;
    }

    public int[] shuffle() { 
   
        int[] clone = nums.clone();
        int n = nums.length;
        Random random = new Random();
        for (int i = 0; i < n; i++) { 
   
            int j = i+random.nextInt(n-i);
            int tem = clone[i];
            clone[i] = clone[j];
            clone[j] =tem;
        }
        return clone;
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/190990.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • shell中的if判断语句怎么写_shell脚本中if用法

    shell中的if判断语句怎么写_shell脚本中if用法if条件判断与if真假判断目录:1.正确写法2.错误写法3.总结一、正确写法在编写shell脚本时,为简化代码的行号及结构的简约型,通常将命令执行结果和判断通过一条语句进行编写(在C语言编写程序时,经常遇到此种写法),如:方法1:单一命令条件判断[root@centos7~]#touchtest.shifuseraddroot&am…

    2022年8月18日
    6
  • 启用shift后门的方法_shift按五次怎么取消

    启用shift后门的方法_shift按五次怎么取消一、什么是shift后门?shift后门是黑客希望以后方便进入服务器而在没有密码的情况下为进入服务器系统而设置的一个后门。其操作就是在不知道管理员密码的情况下,连续按5次shift键来启动粘滞键,已进入服务器的系统程序管理器。二、shift后门的制作?其制作有很多种,下面介绍一种常用的,可以明白其原理自己扩展:在cmd窗口,敲打命令如下:copyc:\windows\ex

    2022年9月18日
    3
  • 区块链—挖矿的本质是什么

    区块链—挖矿的本质是什么区块链是比特币的核心与基础架构,是一个去中心化的账本系统。今天这篇文章,将会重点介绍我们经常提到的挖矿,也就是工作量证明。理解工作量证明机制,将为我们进一步理解比特币区块链的共识机制奠定基础。工作量证明(ProofOfWork,简称POW),简单理解就是一份证明,用来确认你做过一定量的工作。监测工作的整个过程通常是极为低效的,而通过对工作的结果进行认证来证明完成了相应的工作量,则是一种非常高效

    2022年5月28日
    38
  • Weex iOS端的自动刷新和调试

    Weex iOS端的自动刷新和调试

    2022年3月13日
    133
  • 用Python教训盗号骗子

    用Python教训盗号骗子文章目录前言抓包分析代码编写测试效果后记前言近日,本人闲来无事在QQ空间浏览好友动态,突然一张熟悉的图片进入了我的视野,没错,就是它,又是那一张图片。在好奇心的驱使下,我扫了上图中码子,打开一个网站,凭借老夫多年的经验,这网站一定是钓鱼网站。本想就这么算了,可是实在是太无聊了,想要搞一下这个盗号骗子,于是乎就有了这篇文章。抓包分析代码编写思路:利用random随机产生QQ号…

    2022年6月29日
    35
  • 头文件string的作用_cstring头文件的作用

    头文件string的作用_cstring头文件的作用1.string与cstring有什么区别&lt;string&gt;是C++标准库头文件,包含了拟容器classstd::string的声明(不过classstring事实上只是basic_string&lt;char&gt;的typedef),用于字符串操作。&lt;cstring&gt;是C标准库头文件&lt;string.h&gt;的C++标准库版本,包含了C风格字符串(NUL即’\0…

    2022年9月13日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号