-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy path0384.打乱数组.java
95 lines (88 loc) · 2.29 KB
/
0384.打乱数组.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import java.util.Arrays;
import java.util.Random;
/*
* @lc app=leetcode.cn id=384 lang=java
*
* [384] 打乱数组
*
* https://leetcode.cn/problems/shuffle-an-array/description/
*
* algorithms
* Medium (61.17%)
* Likes: 283
* Dislikes: 0
* Total Accepted: 102.3K
* Total Submissions: 167.2K
* Testcase Example: '["Solution","shuffle","reset","shuffle"]\n[[[1,2,3]],[],[],[]]'
*
* 给你一个整数数组 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^6
* nums 中的所有元素都是 唯一的
* 最多可以调用 10^4 次 reset 和 shuffle
*
*
*/
// @lc code=start
class Solution {
private final int[] nums;
private final int[] copy;
private final Random random;
public Solution(int[] nums) {
this.nums = nums;
this.random = new Random();
this.copy = Arrays.copyOf(nums, nums.length);
}
public int[] reset() {
return nums;
}
public int[] shuffle() {
for (int i = copy.length - 1; i >= 0; --i) {
int n = random.nextInt(i + 1);
int v = copy[i];
copy[i] = copy[n];
copy[n] = v;
}
return copy;
}
}
/**
* 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();
*/
// @lc code=end