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

洗牌算法详解_数据库洗牌算法洗牌算法含义将数组中的数随机打乱,每次打乱后出现的概率应该是均等的。思路对于下标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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ue4地编教程_编绳方法

    ue4地编教程_编绳方法一、基本操作二、导入模型和贴图##(一)导入UE4设置:1、导入:2、导入设置##(二)从3DMAX出设置##(三)从Blender导出

    2022年9月26日
    3
  • 基于单片机的毕业设计题目_单片机课题

    基于单片机的毕业设计题目_单片机课题地铁报站系统方案说明经过酷毕啦电子设计室3个月的奋斗和不限努力,设计出了2款有个报站系统的课题:一种为自动报站系统;一种为无线控制报站系统,该系统除了可以设计为地铁报站系统,还可以设计成公交报站系统,有需要了解和学习的同学可以加q:3407232510来进行学习和探讨。本系统所有的全国各地的地铁,无论几号线,都实用这套系统,完全个性定制!产品视频讲解视频链接*(以长沙地铁2号线讲解为例):htt…

    2022年9月28日
    3
  • 大话项目管理工具之Confluence篇

    大话项目管理工具之Confluence篇

    2021年12月9日
    50
  • linux 重命名文件名_centos7重命名文件

    linux 重命名文件名_centos7重命名文件在这个简短的教程中,我们将向您展示如何在Linux中重命名文件。通常,这些命令在云服务器上使用,并且在大多数基于Unix的系统(包括CentOS和Ubuntu)上运行。这是我们一系列简短的Linux教程中的第一篇教程。使用mv命令重命名文件在Linux中重命名命令的最基本(相对最简单)的方法是使用mv命令。语法如下:mv[选项]oldfilenamenewfilename这是一个真实的示例…

    2025年10月22日
    2
  • websocket即时通讯

    websocket即时通讯目录一、websocket简介二、背景三、优点1、控制开销2、实时性更强3、保持连接状态4、更好的二进制支持5、支持扩展和更好的实现压缩效果四、原理1、客户端、服务器建立TCP连接,三次握手。2、TCP连接成功后,客户端通过HTTP协议向服务器传送websocket支持的版本号信息。(开始前的HTTP握手)3、服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据。4、当收到了连接成功的消息后,通过TCP通道进行传输通信。五、websocket和socket的关系六、SuperWebSocket实现服务

    2022年7月11日
    20
  • XPS文件转换PDF小工具,集成了界面,方便大家使用

    XPS文件转换PDF小工具,集成了界面,方便大家使用网上有关于XPS转换PDF的工具gxps.exe,由GhostPDL的代码编译而成。但是很不方便使用,需要设置参数,不够直观。所以想出了给它集成一个外壳的想法。 利用C++语言,编写了外壳,调用gxps.exe,可以直接选择需要转换的文件和保存的地址。 完成界面后,感觉大家还需要再下gxps.exe,两个exe看起来很不爽。所以就将exe集成到了外壳程序里。需要转换时释放该文件

    2022年5月25日
    54

发表回复

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

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