文章目录
- 题目描述
- 思路 && 代码
题目描述
- 中等题,很赞!第一次碰到涉及洗牌算法的题
- 有点涉及概率,主要是要实现公平的随机
思路 && 代码
- 采用了 Knuth 洗牌算法,可以看看这篇博客
- 时间复杂度O(N),空间复杂度O(N)
class Solution {int[] nums;Random random = new Random();public Solution(int[] nums) {this.nums = nums;}// 直接返回原版本public int[] reset() {return nums;}// clone 一个原版本,然后进行洗牌算法:public int[] shuffle() {int[] ans = nums.clone();for(int i = 0; i < ans.length; i++) swap(ans, i, i + random.nextInt(ans.length - i));return ans;}void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}
}