要求高效。
思路一 :s时间上高效必然是空间上换来的,思路关键为: boolean[] nm = new boolean[100]; 将出现过的数字在数组中做下标记。
时间复杂度为 O(n)
输出结果图:
思路二 :上述代码中有一个缺陷,最后一个数生成时,会需要较大的时间去除之前的重复数字。根据洗牌算法得到的思路为,先将数组顺序初始化,有后到前遍历一次将当前数字与之前的随机数字进行交换。
时间复杂度为 O(n),且时间总比思路一要小,也没有开辟另一个数组的空间。
输出结果图:
两方法的代码如下: