首页 > 其他分享 >384. 打乱数组 (数组洗牌)

384. 打乱数组 (数组洗牌)

时间:2023-06-08 20:22:36浏览次数:57  
标签:rand shuffle nums self 洗牌 Solution 384 数组

labuladong 题解

难度中等

给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。打乱后,数组的所有排列应该是 等可能 的。

实现 Solution class:

  • Solution(int[] nums) 使用整数数组 nums 初始化对象
  • int[] reset() 重设数组到它的初始状态并返回
  • int[] shuffle() 返回数组随机打乱后的结果

 

示例 1:

输入
["Solution", "shuffle", "reset", "shuffle"]
[[[1, 2, 3]], [], [], []]
输出
[null, [3, 1, 2], [1, 2, 3], [1, 3, 2]]

解释
Solution solution = new Solution([1, 2, 3]);
solution.shuffle();    // 打乱数组 [1,2,3] 并返回结果。任何 [1,2,3]的排列返回的概率应该相同。例如,返回 [3, 1, 2]
solution.reset();      // 重设数组到它的初始状态 [1, 2, 3] 。返回 [1, 2, 3]
solution.shuffle();    // 随机返回数组 [1, 2, 3] 打乱后的结果。例如,返回 [1, 3, 2]

 

import copy
class Solution:

    def __init__(self, nums: List[int]):
        self.org = nums
        self.rand = copy.deepcopy(nums)


    def reset(self) -> List[int]:
        return self.org


    def shuffle(self) -> List[int]:
        for i in range(len(self.rand)):
            p = random.randint(0,i)
            self.rand[p], self.rand[i] = self.rand[i],self.rand[p]
        return self.rand



# Your Solution object will be instantiated and called as such:
# obj = Solution(nums)
# param_1 = obj.reset()
# param_2 = obj.shuffle()

 

标签:rand,shuffle,nums,self,洗牌,Solution,384,数组
From: https://www.cnblogs.com/zle1992/p/17467581.html

相关文章

  • js 树级数组扁平化和扁平化数组整理成树级
    1.扁平化数组整理为树级,主要实现方法,过滤出没有父级标识(parentId)的作为列表的第一层,有父级标识的项放在其父级的children下面,也跟数组是引用类型的有很大关系父级标识为falsy或者父级为某个特定值(topValue)时,该项就在树级的顶级functionlist2Tree(list,key="id",paren......
  • js数组sort方法排序
    数组的sort方法可以对数组进行排序,默认是按照字符编码的顺序进行排序,可以自定义规则。sort方法会修改原数组。自定义规则简述:比较函数两个参数a和b,(a是b的后一个元素),返回a-b升序,返回b-a降序。letarr=[3,5,2,9,1];arr.sort();//默认升序arr.sort((a,b)=>{//......
  • 数组
    数组27.移除元素-力扣(Leetcode)给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用O(1)额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素......
  • 69 遍历数组 将参数以数组形式传递
    packagecom.fqs.test;publicclasshello{publicstaticvoidmain(String[]args){//需求:设计一个方法用于数组遍历每次可以写100个数组,将数组打印出来;要求遍历的结果是在一行上的。例如:[11,22,33,44,55]int[]arr={1,2,3,4,5};getArr(a......
  • 数组和元祖数据类型
    使用案例来讲解TS的数组类型和元祖类型数组类型方式一要求:定义一个数组这个数组只能存储数值类型的数据letvalArr:Array<Number>//定义一个数组类型存储数值valArr=[1,2,3]//正常valArr=["1","2",3];//会报错console.log(valArr);方式二字符串数组类型......
  • LeetCode 915.分割数组
    LeetCode915.分割数组思路模拟题,两遍遍历,因为要保证左侧区间尽可能小,所以就要找到最左面的适合的点,所以第一遍先从最右边开始记录前缀最小的数,之后再从左往右遍历一遍记录当前最大的前缀,同时将当前最大前缀与下一位的最小前缀比较,如果小于下一位的最小前缀则直接输出即可代码class......
  • LeetCode 907.子数组的最小值之和
    LeetCode907.子数组的最小值之和本题由于每一项都需要遍历到,所以我们要计算所有可能的排列组合情况,所以这道题我们应该从每个元素分别出发,构建单调栈,找到每个元素左边和右边第一个比他小的元素,在这个区间范围内,我们可以断定任何一个子区间得到的最小值都是当前选定这个元素,所以最......
  • LeetCode 862.和至少为k的最短子数组
    LeetCode862.和至少为k的最短子数组本题前缀和队列并不单调,所以应该算变种单调队列,在计算出单调队列以后还要进行进一步优化,即在如下条件如果我们找到当前的s[i]满足条件,则说明之后选取的s[i]不管是多少,均没有当前s[i]距离s[j]近,所以在此以后的值均可以丢弃,同理,s[j]之前的值也是......
  • JS 模拟 Java 动态数组(类)
     Code:/***动态数组*@class*/varDArray=(function(){/***数据数组*@type{*[]}*/letdata;/***数组中的元素个数*@type{number}*/letsize;/***调整数组容器大小*@param{number}new_capacity*/co......
  • 多态数组
    多态数组的应用1多态数组数组的定义类型为父类类型,里面保存的实际元素类型为子类类型继承结构如下:创建1个Person对象,2个Student对象和2个Teacher对象,统一放在数组中,并调用say方法父类Person:packagehspedu.poly_.polyarr_;publicclassPerson{privateString......