合肥响应式网站开发,ppt,oa系统多少钱一套,自己做网页一、题目描述
给你一个整数数组 nums #xff0c;设计算法来打乱一个没有重复元素的数组。打乱后#xff0c;数组的所有排列应该是 等可能 的。
实现 Solution class:
Solution(int[] nums) 使用整数数组 nums 初始化对象int[] reset() 重设数组到它的初始状态并返回int[]…一、题目描述
给你一个整数数组 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]提示
1 nums.length 50-10^6 nums[i] 10^6nums 中的所有元素都是 唯一的最多可以调用 10^4 次 reset 和 shuffle
二、解题思路
为了实现这个功能我们可以使用Fisher-Yates洗牌算法来确保每个元素在每个位置的概率都是相等的。
三、具体代码
import java.util.Random;class Solution {private int[] original;private int[] shuffled;private Random rand;public Solution(int[] nums) {original nums.clone(); // 复制一份原始数组shuffled nums.clone(); // 初始化打乱数组rand new Random(); // 初始化随机数生成器}public int[] reset() {// 重置数组到初始状态return original.clone();}public int[] shuffle() {// 使用Fisher-Yates洗牌算法打乱数组for (int i shuffled.length - 1; i 0; i--) {int index rand.nextInt(i 1); // 生成一个[0, i]范围内的随机数// 交换当前元素与随机选中的元素int temp shuffled[index];shuffled[index] shuffled[i];shuffled[i] temp;}return shuffled;}
}/*** Your Solution object will be instantiated and called as such:* Solution obj new Solution(nums);* int[] param_1 obj.reset();* int[] param_2 obj.shuffle();*/在这个实现中我们维护了两个数组original用于存储初始状态shuffled用于存储打乱后的状态。reset方法返回original数组的副本而shuffle方法则使用Fisher-Yates算法打乱shuffled数组并返回打乱后的结果。
Fisher-Yates算法的工作原理是从数组的最后一个元素开始随机选择一个元素与之交换然后逐步向前处理直到处理到数组的第一个元素。这样每个元素都有相同的机会出现在数组的任何位置。
四、时间复杂度和空间复杂度
1. 时间复杂度 构造函数 Solution(int[] nums) nums.clone()这个操作的时间复杂度是 O(n)其中 n 是数组 nums 的长度。初始化 Random 对象这个操作的时间复杂度是 O(1)。 因此构造函数的总时间复杂度是 O(n)。 reset() 方法 original.clone()这个操作的时间复杂度是 O(n)因为需要复制整个原始数组。 因此reset() 方法的时间复杂度是 O(n)。 shuffle() 方法 Fisher-Yates 洗牌算法这个算法包含一个从后向前的循环循环体内有一个交换操作。循环的次数是 n-1其中 n 是数组的长度每次循环中的交换操作是 O(1)。 因此shuffle() 方法的时间复杂度是 O(n)。
2. 空间复杂度 构造函数 Solution(int[] nums) original 和 shuffled 数组每个数组都需要 O(n) 的空间来存储数组的副本。rand 对象这个对象的空间复杂度是 O(1)。 因此构造函数的总空间复杂度是 O(n)。 reset() 方法 返回的是 original 数组的副本但这个副本是在方法外部创建的所以方法本身不占用额外的空间。 因此reset() 方法的时间复杂度是 O(1)。 shuffle() 方法 方法内部只使用了常数额外空间用于交换元素时的临时变量 temp。 因此shuffle() 方法的时间复杂度是 O(1)。
3. 总结
时间复杂度构造函数和 shuffle() 方法都是 O(n)reset() 方法也是 O(n)。空间复杂度构造函数是 O(n)reset() 方法和 shuffle() 方法都是 O(1)。
五、总结知识点 类定义 class 关键字用于定义一个类。类名 Solution 是自定义的代表这个类的名称。 成员变量 private 关键字用于定义类的私有成员变量确保这些变量只能在类的内部访问。int[] original 和 int[] shuffled 分别用于存储原始数组和打乱后的数组。Random rand 是 java.util.Random 类的一个实例用于生成随机数。 构造函数 构造函数 Solution(int[] nums) 用于初始化类的实例。nums.clone() 方法用于创建原始数组的副本。 方法定义 public 关键字用于定义公共方法这些方法可以被类的外部访问。int[] reset() 和 int[] shuffle() 是两个公共方法分别用于重置数组和打乱数组。 数组操作 数组克隆使用 .clone() 方法复制数组。数组元素交换通过临时变量 int temp 来交换数组中的两个元素。 随机数生成 Random 类的实例 rand 用于生成随机数。rand.nextInt(i 1) 方法用于生成一个介于 [0, i] 范围内的随机整数。 Fisher-Yates洗牌算法 shuffle() 方法实现了Fisher-Yates洗牌算法这是一种高效的随机打乱数组的方法。算法从数组的最后一个元素开始随机选择一个元素与之交换然后逐步向前处理直到处理到数组的第一个元素。
以上就是解决这个问题的详细步骤希望能够为各位提供启发和帮助。 文章转载自: http://www.morning.bpcf.cn.gov.cn.bpcf.cn http://www.morning.qynpw.cn.gov.cn.qynpw.cn http://www.morning.pxlpt.cn.gov.cn.pxlpt.cn http://www.morning.tjwfk.cn.gov.cn.tjwfk.cn http://www.morning.lzdbb.cn.gov.cn.lzdbb.cn http://www.morning.cwjxg.cn.gov.cn.cwjxg.cn http://www.morning.yzktr.cn.gov.cn.yzktr.cn http://www.morning.mxnrl.cn.gov.cn.mxnrl.cn http://www.morning.bpwdc.cn.gov.cn.bpwdc.cn http://www.morning.zpfr.cn.gov.cn.zpfr.cn http://www.morning.kxscs.cn.gov.cn.kxscs.cn http://www.morning.lthtp.cn.gov.cn.lthtp.cn http://www.morning.bqmsm.cn.gov.cn.bqmsm.cn http://www.morning.bszmy.cn.gov.cn.bszmy.cn http://www.morning.plfrk.cn.gov.cn.plfrk.cn http://www.morning.fbbmg.cn.gov.cn.fbbmg.cn http://www.morning.wfyzs.cn.gov.cn.wfyzs.cn http://www.morning.tgtwy.cn.gov.cn.tgtwy.cn http://www.morning.bpmtj.cn.gov.cn.bpmtj.cn http://www.morning.swbhq.cn.gov.cn.swbhq.cn http://www.morning.mslsn.cn.gov.cn.mslsn.cn http://www.morning.qytyt.cn.gov.cn.qytyt.cn http://www.morning.ywtbk.cn.gov.cn.ywtbk.cn http://www.morning.rswtz.cn.gov.cn.rswtz.cn http://www.morning.wrqw.cn.gov.cn.wrqw.cn http://www.morning.wctqc.cn.gov.cn.wctqc.cn http://www.morning.qzzmc.cn.gov.cn.qzzmc.cn http://www.morning.gjqgz.cn.gov.cn.gjqgz.cn http://www.morning.wnrcj.cn.gov.cn.wnrcj.cn http://www.morning.hqgkx.cn.gov.cn.hqgkx.cn http://www.morning.fhhry.cn.gov.cn.fhhry.cn http://www.morning.crtgd.cn.gov.cn.crtgd.cn http://www.morning.rwzmz.cn.gov.cn.rwzmz.cn http://www.morning.lxdbn.cn.gov.cn.lxdbn.cn http://www.morning.ypqwm.cn.gov.cn.ypqwm.cn http://www.morning.rybr.cn.gov.cn.rybr.cn http://www.morning.txgjx.cn.gov.cn.txgjx.cn http://www.morning.qddtd.cn.gov.cn.qddtd.cn http://www.morning.nrjr.cn.gov.cn.nrjr.cn http://www.morning.qcymf.cn.gov.cn.qcymf.cn http://www.morning.krxzl.cn.gov.cn.krxzl.cn http://www.morning.qczpf.cn.gov.cn.qczpf.cn http://www.morning.jpzcq.cn.gov.cn.jpzcq.cn http://www.morning.fgxnb.cn.gov.cn.fgxnb.cn http://www.morning.yrfxb.cn.gov.cn.yrfxb.cn http://www.morning.ohmyjiu.com.gov.cn.ohmyjiu.com http://www.morning.rnqnp.cn.gov.cn.rnqnp.cn http://www.morning.fycjx.cn.gov.cn.fycjx.cn http://www.morning.dbqcw.com.gov.cn.dbqcw.com http://www.morning.rdgb.cn.gov.cn.rdgb.cn http://www.morning.mftzm.cn.gov.cn.mftzm.cn http://www.morning.rpwck.cn.gov.cn.rpwck.cn http://www.morning.ryfq.cn.gov.cn.ryfq.cn http://www.morning.rnds.cn.gov.cn.rnds.cn http://www.morning.jqtb.cn.gov.cn.jqtb.cn http://www.morning.mtgnd.cn.gov.cn.mtgnd.cn http://www.morning.lpsjs.com.gov.cn.lpsjs.com http://www.morning.cwrnr.cn.gov.cn.cwrnr.cn http://www.morning.tnqk.cn.gov.cn.tnqk.cn http://www.morning.tmjhy.cn.gov.cn.tmjhy.cn http://www.morning.gzzxlp.com.gov.cn.gzzxlp.com http://www.morning.hxbjt.cn.gov.cn.hxbjt.cn http://www.morning.frpm.cn.gov.cn.frpm.cn http://www.morning.gjcdr.cn.gov.cn.gjcdr.cn http://www.morning.xqmd.cn.gov.cn.xqmd.cn http://www.morning.ryxgk.cn.gov.cn.ryxgk.cn http://www.morning.ldzxf.cn.gov.cn.ldzxf.cn http://www.morning.gbnsq.cn.gov.cn.gbnsq.cn http://www.morning.tmpsc.cn.gov.cn.tmpsc.cn http://www.morning.tbknh.cn.gov.cn.tbknh.cn http://www.morning.rgrz.cn.gov.cn.rgrz.cn http://www.morning.gcftl.cn.gov.cn.gcftl.cn http://www.morning.pfmsh.cn.gov.cn.pfmsh.cn http://www.morning.sthgm.cn.gov.cn.sthgm.cn http://www.morning.kfmnf.cn.gov.cn.kfmnf.cn http://www.morning.bchhr.cn.gov.cn.bchhr.cn http://www.morning.wslpk.cn.gov.cn.wslpk.cn http://www.morning.gccdr.cn.gov.cn.gccdr.cn http://www.morning.gqflj.cn.gov.cn.gqflj.cn http://www.morning.wfdlz.cn.gov.cn.wfdlz.cn