我正在尝试这样做,这样随机生成器就不会在数组中产生相同的数字。我也不知道怎么才能找到丢失的号码。我尝试了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);
}
}
}
发布于 2017-10-20 18:54:52
假设:
解决方案
return 55 - Arrays.stream(yourArr).sum();
这是O(n)运行时间和O(1)空间复杂度。
如果我们打破假设。
您将需要O(N)空间来找出缺少哪些条目。要保存标记,您可以使用List
或BitSet
,或者使用2个字节并手动管理它。这里n是随机数生成宽度。
发布于 2017-10-20 18:41:03
似乎没有提到使用临时数据结构。您可以对数组进行排序并查找缺少的数字,也可以使用临时排序的数据结构。
发布于 2017-10-20 18:43:18
你把两件事混在一起了:问题用例的生成器算法和问题本身的解决方案。您根本不应该对“随机数组”是如何生成的感兴趣(除非您想测试您的解决方案)。您当然不应该尝试编写代码来解决生成示例数组的方法中的问题。
如果你想要一个随机排序的列表,Collections.shuffle
会帮你处理。如果您想要一个不包含单个元素的列表,只需生成一个包含所有元素1..n的列表,然后删除随机选择的数字(然后进行混洗)。发电机就是这么回事。至于解决方案,有很多方法可以解决,有人已经建议使用求和,这是一个非常有效的解决方案。
https://stackoverflow.com/questions/46855327
复制