知識點14 陣列內儲存1 100的不重複隨機數問題

2021-08-05 18:53:56 字數 1421 閱讀 9145

問題描述:在乙個長度為100的陣列裡隨機插入100個1-100內的隨機數,要求隨機數不能重複,並且不能使用其他型別的資料結構。僅可以使用陣列完成。

解法1:

/**

* 解題思路:

* 隨機生成1-100裡面的數字z

* .* 判斷是否在陣列裡面存活

* 如果存活,則拋棄

* 如果不存活,新增進陣列中

* 問題:效率不高

* */

private

static

void

putrandomnumberintoarrays(int arrays)

} while (!(count == arrays.length));

}/**判斷是否存在

*/static

boolean isalive(int number,int arrays)

}return isalive;

}

這個解法應該是符合普遍人的思路了,只是這樣的話會造成乙個問題:當陣列內的隨機數越多的時候,重複的機率就會擴大,也就是需要生成更多的隨機數,這使得效率十分低下,是故不推薦。但如果是在想不起其他優化的話,還是可以先參照的。下面是優化解法:

解法2:

/**

* 解題思路:

在一長度為100陣列中,依次存入1-100的數字

隨機選取乙個下標,將其儲存的值與最後乙個值交換

把陣列的最後乙個值加入到陣列中,改變下一次隨機下標取值範圍(-1)

避免了重複數字的出現,避免了多次的迴圈判斷監測,優化效率,但增加記憶體

* */

private

static

void

putrandomnumberintoarrays(int arrays)

int count = 0;

dowhile(count != arrays.length);

}}

這個演算法極大程度上優化了效率問題,但也增加了記憶體。雖然這個記憶體不算很致命。但總的來說,還有可以優化的地方。

解法3:

/**

* 優化思路:

在陣列內直接存放1-100的隨機數,隨機生成下標,將下標數值得數與可生成隨機數的最大值進行交換,然後縮減隨機數範圍(-1)

既不新增記憶體,也優化了效率

* */

private

static

void

putrandomnumberintoarrays(int arrays)

dowhile(datalength>0);

}}

這個演算法時目前所能想到的最佳的方法了,既不增加記憶體,也避免了隨機值重複的問題。這個和解法2的問題僅限於是否增加乙個記憶體而已,本質上是一致的,可供參考。

陣列知識點

陣列就是按順序排列的一組同種型別的變數構成的集合 佔一片連續的儲存單元 陣列元素 下標變數 本質是變數。一 一維陣列 1.格式 陣列名 常量表示式 2.初始化 陣列定義後的初值仍然是隨機數 如 int a 5 int a 10 該方法僅對陣列的前五個元素依次進行初始化,其餘值為0。int a 5 表...

陣列知識點

1.通過以下 塊,看出普通陣列與引用型別陣列區別 public class test01 for int i 0 i user arr02 newuser 3 引用型別的陣列 arr02 0 new user 1 肖杰航 arr02 1 new user 2 小傑航 arr02 2 new user...

陣列知識點

陣列就是乙個容器,用於存放一系列相同的資料型別 乙個變數名存放多個資料 1 宣告陣列 int a 兩種方式 int a1 int a2 2 分配空間 a new int 5 3 賦值 a 0 8 4 處理資料 3 擴充套件點 增強的for迴圈 input.next 與 input.nextline ...