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

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


相关推荐

  • C#自定义控件之-winform美化「建议收藏」

    C#自定义控件之-winform美化「建议收藏」对于系统自带的窗体,博主实在不敢恭维,测试时使用方便快捷,但真正项目中无法使用,只因不美观的外表,每次都很头疼窗体的美化,这里列出一些需要解决的问题和自己收集到的解决方法,如有错误请指出。废话不多说先上一张最近写的一个小工具的效果图。以上是工具的基本截图,在工具的制作中对窗体的自定义包括以下几点:一、无边框拖动窗体当设置窗体的fromboderstyle为null时,系统自带的窗体

    2022年5月13日
    41
  • ubuntu安装gcc-6

    ubuntu安装gcc-6原文:https://blog.csdn.net/sinat_23246437/article/details/543426331.安装gcc-6:sudoapt-getupdate&amp;&amp;\sudoapt-getinstallbuild-essentialsoftware-properties-common-y&amp;&amp;\sudoadd…

    2022年7月24日
    22
  • 深入浅出JVM调优,看完你就懂

    深入浅出JVM调优,看完你就懂深入浅出JVM调优基本概念:JVM把内存区分为堆区(heap)、栈区(stack)和方法区(method)。由于本文主要讲解JVM调优,因此我们可以简单的理解为,JVM中的堆区中存放的是实际的对象,是需要被GC的。其他的都无需GC。下图文JVM的内存模型从图中我们可以看到,1、JVM实质上分为三大块,年轻代(YoungGen),年老代(OldMemory…

    2022年6月1日
    35
  • 存储过程基础知识

    什么是存储过程呢?存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令。 通俗来讲:存储过程其实就是能完成一定操作的一组SQL语句。http://hovertree.com/h/

    2021年12月23日
    43
  • cod单页系统 wordpress 来搭建 外贸 单面系统

    cod单页系统 wordpress 来搭建 外贸 单面系统可私聊模板

    2025年11月8日
    2
  • java大数据开发需要掌握什么_大数据要学java吗

    java大数据开发需要掌握什么_大数据要学java吗​​​​​​你想过自己的未来规划吗?java大数据程序员只需要学到技术就行吗?1.如何成为大数据工程师Java开发是IT行业的经典岗位,行业当中存在普遍的需求,Web开发、Android开发、游戏开发等基本上Java语言是主力队伍。而进入大数据时代,Java又在大数据方向上有了用武之地,又该如何进行成长路线规划。在Java程序界流行着一种默认的说法叫黄金5年,也就是一个程序员从入职的时候开始算起,前五年的选择直接影响着整个职业生涯中的职业发展方向和薪资走向。2014年8月,阿里巴巴举办了

    2022年10月19日
    4

发表回复

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

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