對於乙個陣列,我們應該如何去打亂它的順序呢?怎樣保證足夠亂,即概率都一樣?
分析洗牌演算法正確性的準則:產生的結果必須有 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 重設陣列到它的初始狀態 ...