java在使用随机生成器的数组中查找缺失的数字
我试图让随机生成器在数组中不产生相同的数字。我也不知道怎么找到丢失的号码。我尝试了if语句,它工作了,但重复了
问题“在数组中找到缺失的数字。数组由1到10的随机序列组成。数组中的一个数字缺失,你必须找到它。使用一个循环。例如{5,6,9,4,1,2,8,3,10}–结果将是:7
import java.util.Random;
public class questionThree
{
public static void main(String[] args)
{
int [] numbers = new int [10];
Random rand = new Random();
int numArr = 1;
for (int i = 1; i < 9; i++)
{
int n = rand.nextInt(10) + 1;
numbers[i] = n;
if (numbers[i] == numArr)
numArr++;
else
System.out.println("The missing num is " +numArr);
}
for(int val : numbers)
{
System.out.println("The next value is " +
val);
}
}
}
# 1 楼答案
假设:
解决方案
这是O(n)运行时和O(1)空间复杂性
如果我们打破假设
您将需要O(N)空间来确定缺少哪些条目。要保存标记,可以使用
List
或BitSet
或2个字节并手动管理。N是这里的随机数生成宽度# 2 楼答案
你把两件事混为一谈:问题案例的生成器算法和问题本身的解决方案。你不应该对“随机数组”是如何生成的感兴趣(除非你想测试你的解决方案)。当然,您不应该尝试在生成样本数组的方法中编写解决问题的代码
如果你想要一个随机排序的列表,
Collections.shuffle
会帮你处理。如果想要一个没有单个元素的列表,只需生成一个包含所有元素的列表1。。n,然后删除随机选择的数字(然后洗牌)。发电机就这样了。至于解决方案,有很多方法,有人已经建议使用求和,这是一个完全有效的解决方案