問題描述:在乙個長度為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 ...