暴力
题解:
将数组下标放到一个list中,随机算去一个下标,然后删除元素,再随机选取一个下标
// 300-t384-0104-打乱数组
// 法一 暴力
class Solution01 {
private int[] originArr;
private ArrayList<Integer> indexList;
public Solution01(int[] nums) {
originArr=nums;
indexList=new ArrayList<>();
}
public int[] reset() {
return originArr;
}
public int[] shuffle() {
int[] curArr=new int[originArr.length];
if (originArr.length==0){
return curArr;
}
int length = originArr.length;
for (int i = 0; i < length; i++) {
indexList.add(i);
}
Random random=new Random();
for (int i = 0; i <originArr.length ; i++) { //i 当前待处理的下标
int randomIIndex = random.nextInt(indexList.size());
int randomIndex=indexList.get(randomIIndex);// 要填入的下标
// 删除刚才选中的元素 用最后的元素代替待删除的元素 时间O(1)
int lastIndex = indexList.size()-1;
indexList.set(randomIIndex,indexList.get(lastIndex));
indexList.remove(lastIndex);
// 构造新数组
curArr[i]=originArr[randomIndex];
}
return curArr;
}
}