mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-05 00:25:22 +08:00
28
leetcode/0384.Shuffle-an-Array/384.Shuffle an Array.go
Normal file
28
leetcode/0384.Shuffle-an-Array/384.Shuffle an Array.go
Normal file
@ -0,0 +1,28 @@
|
||||
package leetcode
|
||||
|
||||
import "math/rand"
|
||||
|
||||
type Solution struct {
|
||||
nums []int
|
||||
}
|
||||
|
||||
func Constructor(nums []int) Solution {
|
||||
return Solution{
|
||||
nums: nums,
|
||||
}
|
||||
}
|
||||
|
||||
/** Resets the array to its original configuration and return it. */
|
||||
func (this *Solution) Reset() []int {
|
||||
return this.nums
|
||||
}
|
||||
|
||||
/** Returns a random shuffling of the array. */
|
||||
func (this *Solution) Shuffle() []int {
|
||||
arr := make([]int, len(this.nums))
|
||||
copy(arr, this.nums)
|
||||
rand.Shuffle(len(arr), func(i, j int) {
|
||||
arr[i], arr[j] = arr[j], arr[i]
|
||||
})
|
||||
return arr
|
||||
}
|
50
leetcode/0384.Shuffle-an-Array/384.Shuffle an Array_test.go
Normal file
50
leetcode/0384.Shuffle-an-Array/384.Shuffle an Array_test.go
Normal file
@ -0,0 +1,50 @@
|
||||
package leetcode
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
type question384 struct {
|
||||
para384
|
||||
ans384
|
||||
}
|
||||
|
||||
// para 是参数
|
||||
type para384 struct {
|
||||
ops []string
|
||||
value [][]int
|
||||
}
|
||||
|
||||
// ans 是答案
|
||||
type ans384 struct {
|
||||
ans [][]int
|
||||
}
|
||||
|
||||
func Test_Problem384(t *testing.T) {
|
||||
|
||||
qs := []question384{
|
||||
|
||||
{
|
||||
para384{ops: []string{"Solution", "shuffle", "reset", "shuffle"}, value: [][]int{{1, 2, 3}, {}, {}, {}}},
|
||||
ans384{[][]int{nil, {3, 1, 2}, {1, 2, 3}, {1, 3, 2}}},
|
||||
},
|
||||
}
|
||||
|
||||
fmt.Printf("------------------------Leetcode Problem 384------------------------\n")
|
||||
|
||||
for _, q := range qs {
|
||||
sol := Constructor(nil)
|
||||
_, p := q.ans384, q.para384
|
||||
for _, op := range p.ops {
|
||||
if op == "Solution" {
|
||||
sol = Constructor(q.value[0])
|
||||
} else if op == "reset" {
|
||||
fmt.Printf("【input】:%v 【output】:%v\n", op, sol.Reset())
|
||||
} else {
|
||||
fmt.Printf("【input】:%v 【output】:%v\n", op, sol.Shuffle())
|
||||
}
|
||||
}
|
||||
}
|
||||
fmt.Printf("\n\n\n")
|
||||
}
|
81
leetcode/0384.Shuffle-an-Array/README.md
Normal file
81
leetcode/0384.Shuffle-an-Array/README.md
Normal file
@ -0,0 +1,81 @@
|
||||
# [384.Shuffle an Array](https://leetcode-cn.com/problems/shuffle-an-array/)
|
||||
|
||||
## 题目
|
||||
|
||||
Given an integer array nums, design an algorithm to randomly shuffle the array. All permutations of the array should be equally likely as a result of the shuffling.
|
||||
|
||||
Implement the Solution class:
|
||||
|
||||
- Solution(int[] nums) Initializes the object with the integer array nums.
|
||||
- int[] reset() Resets the array to its original configuration and returns it.
|
||||
- int[] shuffle() Returns a random shuffling of the array.
|
||||
|
||||
**Example 1**:
|
||||
|
||||
Input
|
||||
["Solution", "shuffle", "reset", "shuffle"]
|
||||
[[[1, 2, 3]], [], [], []]
|
||||
Output
|
||||
[null, [3, 1, 2], [1, 2, 3], [1, 3, 2]]
|
||||
|
||||
Explanation
|
||||
Solution solution = new Solution([1, 2, 3]);
|
||||
solution.shuffle(); // Shuffle the array [1,2,3] and return its result.
|
||||
// Any permutation of [1,2,3] must be equally likely to be returned.
|
||||
// Example: return [3, 1, 2]
|
||||
solution.reset(); // Resets the array back to its original configuration [1,2,3]. Return [1, 2, 3]
|
||||
solution.shuffle(); // Returns the random shuffling of array [1,2,3]. Example: return [1, 3, 2]
|
||||
|
||||
**Constraints:**
|
||||
|
||||
- 1 <= nums.length <= 200
|
||||
- -1000000 <= nums[i] <= 1000000
|
||||
- All the elements of nums are unique.
|
||||
- At most 5 * 10000 calls in total will be made to reset and shuffle.
|
||||
|
||||
## 题目大意
|
||||
|
||||
给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。
|
||||
|
||||
实现 Solution class:
|
||||
|
||||
- Solution(int[] nums) 使用整数数组 nums 初始化对象
|
||||
- int[] reset() 重设数组到它的初始状态并返回
|
||||
- int[] shuffle() 返回数组随机打乱后的结果
|
||||
|
||||
## 解题思路
|
||||
|
||||
- 使用rand.Shuffle进行数组随机打乱
|
||||
|
||||
## 代码
|
||||
|
||||
```go
|
||||
package leetcode
|
||||
|
||||
import "math/rand"
|
||||
|
||||
type Solution struct {
|
||||
nums []int
|
||||
}
|
||||
|
||||
func Constructor(nums []int) Solution {
|
||||
return Solution{
|
||||
nums: nums,
|
||||
}
|
||||
}
|
||||
|
||||
/** Resets the array to its original configuration and return it. */
|
||||
func (this *Solution) Reset() []int {
|
||||
return this.nums
|
||||
}
|
||||
|
||||
/** Returns a random shuffling of the array. */
|
||||
func (this *Solution) Shuffle() []int {
|
||||
arr := make([]int, len(this.nums))
|
||||
copy(arr, this.nums)
|
||||
rand.Shuffle(len(arr), func(i, j int) {
|
||||
arr[i], arr[j] = arr[j], arr[i]
|
||||
})
|
||||
return arr
|
||||
}
|
||||
```
|
Reference in New Issue
Block a user