等概率不重復的生成隨機數(shù)應該是在平時開發(fā)中常見的,也是面試中常問的基礎之一。有多種實現(xiàn)方式,有人人都可以想到的,也有不容易想到的巧妙算法,那么當有人問你哪個實現(xiàn)方式更好的時候你該怎么回答呢?回答巧妙的算法比普通算法好?答案顯而易見,首先要搞清楚應用場景和要解決的問題。這樣才能判斷一個算法或者方案的合適與否。

  接下來明確問題、提出多個解決方法,最后對比每個方法的優(yōu)劣與使用場景。

  要求:

  可能有些具體的場景和問題需求都不一樣,可以統(tǒng)一:在一定范圍內(nèi)等概率不重復的生成有限個隨機數(shù)。具體的可以定義為,在[m,n]之間等概率的生成k個不相同的隨機數(shù)。

   設計與實現(xiàn):

  1.排重

  一個最簡單的想法就是先生成再排重,直到生成k個隨機數(shù)為止。把所有用到排重的算法都可以歸為一類,包括利用Map、Set、BitMap、數(shù)組下標去重的都算。因為本質(zhì)上是一樣的,可能在排重的時候有些優(yōu)化。

平面設計培訓,網(wǎng)頁設計培訓,美工培訓,游戲開發(fā),動畫培訓

public List<Integer> random1(int m, int n, int k) {        if (k < 1 || k > n-m+1) {
        &nb
        
		

網(wǎng)友評論