Skip to content

Commit 377ea38

Browse files
author
ruislan
committed
solved q384
1 parent 6ae31d3 commit 377ea38

File tree

4 files changed

+117
-0
lines changed

4 files changed

+117
-0
lines changed

Cargo.lock

Lines changed: 79 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ edition = "2018"
77
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
88

99
[dependencies]
10+
rand = "0.8.0"

src/q/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@ mod q374;
210210
mod q375;
211211
mod q377;
212212
mod q383;
213+
mod q384;
213214
mod q386;
214215
mod q387;
215216
mod q389;

src/q/q384.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
use rand::prelude::*;
2+
3+
struct Solution {
4+
nums: Vec<i32>,
5+
origin: Vec<i32>,
6+
n: usize,
7+
}
8+
9+
#[allow(unused)]
10+
impl Solution {
11+
fn new(nums: Vec<i32>) -> Self {
12+
Solution { nums: nums.clone(), origin: nums.clone(), n: nums.len() }
13+
}
14+
15+
fn reset(&mut self) -> Vec<i32> {
16+
self.nums = self.origin.clone();
17+
self.nums.clone()
18+
}
19+
20+
// 方法1
21+
// 模拟洗牌,假设我们有一堆牌0..n
22+
// 我们可以随机抽取一张这个牌,然后把这张牌放到最后
23+
// 在这里,我们可以把这张牌与最后一张牌进行交换
24+
// 也即是说最后一张牌已经洗好,
25+
// 那么要洗的牌就是第一张到倒数第二张,也即是0..n-1
26+
// 我们重复上述操作,一直到最后一张牌
27+
// 即完成了洗牌操作
28+
// AC 20ms 5.5mb
29+
fn shuffle(&mut self) -> Vec<i32> {
30+
for i in (0..self.n).rev() {
31+
let j = rand::thread_rng().gen_range(0..i + 1);
32+
self.nums.swap(i, j);
33+
}
34+
self.nums.clone()
35+
}
36+
}

0 commit comments

Comments
 (0)