1:首先從原始陣列中隨機選擇乙個數字,然後將該數字從陣列中剔除,再隨記選,再剔除,重複99次,就解決了。
我們知道從陣列中剔除乙個元素的複雜度為o(n),那麼隨機選取n個數字,它的複雜度就是o(n2)了。
2:用hash作為中間過濾層,因為在陣列中,我們採用隨機數的話,也許隨機數在多次隨機中可能會有重複,所以需要用hash來判斷一下,
如果在hash中重複,則繼續產生隨機數,直到不重複為止,當然這個複雜度就不好說了,得要看隨機數隨機不隨機了,好的話,o(n)搞定,
不走運的話無上限~
可以對應到的就是「洗撲克牌」,在演算法中也叫「洗牌原理」,我們知道洗撲克牌的方式就是隨機的交換撲克牌的位置,又叫做"切牌",當你切了
很多次後,我們的撲克牌就可以認為是足夠亂了,複雜度也就變成了o(n),用**實現就是這樣的。
<1> 先有序的生成52張牌,然後有序的放到陣列中。
<2>從1-52中隨機的產生乙個數,然後將當前次數的位置跟隨機數的位置進行交換,重複52次,我們的牌就可以認為足夠亂了。
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
}public class cardclass
/// /// 開牌
///
public void newcard()
card[i - 1] = new card();}
}/// /// 洗牌
///
public void shuffle()
}/// /// 輸入牌型
如何產生1 100之間的100個不重複的隨機數
如何產生1 100 之間的100個不重複的隨機數 如果這是你是第一次看到這個題目,也許你的想法有很多。1 首先從原始陣列中隨機選擇乙個數字,然後將該數字從陣列中剔除,再隨記選,再剔除,重複99次,就解決了。我們知道從陣列中剔除乙個元素的複雜度為o n 那麼隨機選取n個數字,它的複雜度就是o n2 了...
輸出1 100之間的素數
思路 取出1 100,寫乙個布林型別的的方法判斷是不是素數,是素數就輸出。判斷是不是素數的方法是 如果是 1直接返回 false,不是1 時,先得到該數的 2次方根,從 2開始遍歷直到該數的 2次根。如果取到的數能把 2到該數的 2次方根之間的數除盡,就不是素數,除不盡就是。能被2除盡的就不是質數。...
1 100之間 7 的倍數的個數,並列印
7的倍數 x 7 0 偶數的話 x 2 0 1 package com.ibeve.demo 23 4 2.1 100之間 7 的倍數的個數,並列印 5 思路 6 1.先對 1 100進行迴圈 遍歷 通過迴圈的形式 7 2.在遍歷的過程中,定義條件,只對7的倍數進行操作 8 3.因為 7 的倍數不確...