leet384 打亂陣列

2021-10-01 08:38:56 字數 1353 閱讀 8651

對於乙個陣列,我們應該如何去打亂它的順序呢?怎樣保證足夠亂,即概率都一樣?

分析洗牌演算法正確性的準則:產生的結果必須有 n! 種可能,否則就是錯誤的。這個很好解釋,因為乙個長度為 n 的陣列的全排列就有 n! 種,也就是說打亂結果總共有 n! 種。演算法必須能夠反映這個事實,才是正確的

可以通過數學推導或者直接選擇蒙特卡羅驗證

//正確nums.length!

for(

int i =

0; i

)//錯誤 nums.length的nums.length次冪

for(

int i =

0; i

)

leetcode題解決方法

暴力法:我做的就是這個方法

public

class

solution

/** resets the array to its original configuration and return it. */

public

int[

]reset()

/** returns a random shuffling of the array. */

public

int[

]shuffle()

int j =0;

for(

int i =

0; i

)return nums;

}}

直接原地交換

public

class

solution1

private

intrandrange

(int min,

int max)

private

void

swap

(int i,

int j)

/** resets the array to its original configuration and return it. */

public

int[

]reset()

/** returns a random shuffling of the array. */

public

int[

]shuffle()

int j =0;

for(

int i =

0; i

)return nums;

}}

384 打亂陣列(C )

打亂乙個沒有重複元素的陣列。示例 以數字集合 1,2 和 3 初始化陣列。int nums solution solution new solution nums 打亂陣列 1,2,3 並返回結果。任何 1,2,3 的排列返回的概率應該相同。solution.shuffle 重設陣列到它的初始狀態 ...

LeetCode 384 打亂陣列

打亂乙個沒有重複元素的陣列。示例 以數字集合 1,2 和 3 初始化陣列。int nums solution solution new solution nums 打亂陣列 1,2,3 並返回結果。任何 1,2,3 的排列返回的概率應該相同。solution.shuffle 重設陣列到它的初始狀態 ...

Leetcode 384 打亂陣列

打亂乙個沒有重複元素的陣列。示例 以數字集合 1,2 和 3 初始化陣列。int nums solution solution new solution nums 打亂陣列 1,2,3 並返回結果。任何 1,2,3 的排列返回的概率應該相同。solution.shuffle 重設陣列到它的初始狀態 ...