From b4ebef4dbe992b728688395747cd10903952edd0 Mon Sep 17 00:00:00 2001 From: huangge1199 Date: Fri, 20 Aug 2021 15:47:21 +0800 Subject: [PATCH] =?UTF-8?q?384:=E6=89=93=E4=B9=B1=E6=95=B0=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leetcode/editor/cn/ShuffleAnArray.java | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 src/main/java/leetcode/editor/cn/ShuffleAnArray.java diff --git a/src/main/java/leetcode/editor/cn/ShuffleAnArray.java b/src/main/java/leetcode/editor/cn/ShuffleAnArray.java new file mode 100644 index 0000000..9a57930 --- /dev/null +++ b/src/main/java/leetcode/editor/cn/ShuffleAnArray.java @@ -0,0 +1,103 @@ +//给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。 +// +// 实现 Solution class: +// +// +// Solution(int[] nums) 使用整数数组 nums 初始化对象 +// int[] reset() 重设数组到它的初始状态并返回 +// int[] shuffle() 返回数组随机打乱后的结果 +// +// +// +// +// 示例: +// +// +//输入 +//["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 <= 200 +// -10⁶ <= nums[i] <= 10⁶ +// nums 中的所有元素都是 唯一的 +// 最多可以调用 5 * 10⁴ 次 reset 和 shuffle +// +// Related Topics 数组 数学 随机化 👍 152 👎 0 + +package leetcode.editor.cn; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +//384:打乱数组 +class ShuffleAnArray { + public static void main(String[] args) { + //测试代码 +// Solution solution = new ShuffleAnArray().new Solution(); + } + + //力扣代码 + //leetcode submit region begin(Prohibit modification and deletion) + class Solution { + private int[] array; + private int[] original; + + private Random rand = new Random(); + + private List getArrayCopy() { + List asList = new ArrayList(); + for (int i = 0; i < array.length; i++) { + asList.add(array[i]); + } + return asList; + } + + public Solution(int[] nums) { + array = nums; + original = nums.clone(); + } + + public int[] reset() { + array = original; + original = original.clone(); + return array; + } + + public int[] shuffle() { + List aux = getArrayCopy(); + + for (int i = 0; i < array.length; i++) { + int removeIdx = rand.nextInt(aux.size()); + array[i] = aux.get(removeIdx); + aux.remove(removeIdx); + } + + return array; + } + } + +/** + * 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(); + */ +//leetcode submit region end(Prohibit modification and deletion) + +} \ No newline at end of file