提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
前言
提示:这里可以添加本文要记录的大概内容:
2月17日练习内容
提示:以下是本篇文章正文内容,下面案例可供参考
一、题目-打乱数组
1.题目描述
给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。打乱后,数组的所有排列应该是 等可能 的。
实现 Solution class:
Solution(int[] nums) 使用整数数组 nums 初始化对象
int[] reset() 重设数组到它的初始状态并返回
int[] shuffle() 返回数组随机打乱后的结果
示例 1:
输入
["Solution", "shuffle", "reset", "shuffle"]
[[[1, 2, 3]], [], [], []]
输出
[null, [3, 1, 2], [1, 2, 3], [1, 3, 2]]
解释
Solution solution = new Solution([1, 2, 3]);
solution.shuffle(); // 打乱数组 [1,2,3] 并返回结果。任何 [1,2,3]的排列返回的概率应该相同。例如,返回 [3, 1, 2]
solution.reset(); // 重设数组到它的初始状态 [1, 2, 3] 。返回 [1, 2, 3]
solution.shuffle(); // 随机返回数组 [1, 2, 3] 打乱后的结果。例如,返回 [1, 3, 2]
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/shuffle-an-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2.思路与代码
2.1 思路
1.创建两个类i成员数组,nums与tempNums;
2.在改造函数中初始化nums与tempNums,并将nums中的数据copy到tempNums数组中,用来回返nums数组;
3.对于回返数组方法,将tempNums数组中的数据copy到nums数组中,返回nums数组即可
4.对于打乱数组的方法,先创建一个随机变量,接着遍历数组获得i,如何取j为i加上【0,nums.length- i)中的随机数,最后交换索引i与索引j处的数据
2.2 代码
代码如下(示例):
class Solution {
private int[] nums; //数组
private int[] tempNums; //临时数组
//构造函数
public Solution(int[] nums) {
//初始化nums
this.nums = nums;
//初始化tempNums
this.tempNums = new int[nums.length];
//将nums的数据copy到tempNum中
System.arraycopy(nums,0,tempNums,0,nums.length);
}
//重设数组
public int[] reset() {
//将tempNums中的数据copy到nums中
System.arraycopy(tempNums,0,nums,0,nums.length);
return nums;
}
public int[] shuffle() {
//随机数
Random r = new Random();
for(int i = 0;i < nums.length;i ++){
int j = i + r.nextInt(nums.length - i);
//交换i与j
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
return nums;
}
}
/**
* Your Solution object will be instantiated and called as such:
* Solution obj = new Solution(nums);
* int[] param_1 = obj.reset();
* int[] param_2 = obj.shuffle();
*/
总结
提示:这里对文章进行总结: