384.打乱数组
链接:384.打乱数组
难度:Medium
标签:数组、数学、随机化
简介:给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。
题解 1 - typescript
- 编辑时间:2021-08-20
- 执行用时:228ms
- 内存消耗:52.6MB
- 编程语言:typescript
- 解法介绍:随机交换下标。
class Solution {
constructor(public nums: number[]) {}
reset(): number[] {
return this.nums;
}
shuffle(): number[] {
const arr = [...this.nums];
for (let i = 0; i < arr.length; i++) {
const random = this.random(i, arr.length - 1);
[arr[i], arr[random]] = [arr[random], arr[i]];
}
return arr;
}
random(min: number, max: number): number {
return min + ~~(Math.random() * (max - min + 1));
}
}
题解 2 - typescript
- 编辑时间:2021-07-30
- 执行用时:236ms
- 内存消耗:54.1MB
- 编程语言:typescript
- 解法介绍:生成随机数,利用交换打乱。
class Solution {
constructor(private nums: number[]) {}
reset(): number[] {
return this.nums;
}
shuffle(): number[] {
const ans: number[] = this.nums.slice();
for (let i = 0; i < ans.length; i++) {
const random = this.random(i);
[ans[i], ans[random]] = [ans[random], ans[i]];
}
return ans;
}
private random(minNum: number) {
const maxNum = this.nums.length - 1;
return parseInt((Math.random() * (maxNum - minNum + 1) + minNum) as any, 10);
}
}