跳到主要内容

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);
}
}