有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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);
    } 
  }
}

共 (2) 个答案

  1. # 1 楼答案

    假设:

    • 数字是唯一的
    • 只有一个条目丢失
    • 数字范围从[1,10]到[1,10]不等

    解决方案

    return 55 - Arrays.stream(yourArr).sum();
    

    这是O(n)运行时和O(1)空间复杂性

    如果我们打破假设

    您将需要O(N)空间来确定缺少哪些条目。要保存标记,可以使用ListBitSet或2个字节并手动管理。N是这里的随机数生成宽度

  2. # 2 楼答案

    你把两件事混为一谈:问题案例的生成器算法和问题本身的解决方案。你不应该对“随机数组”是如何生成的感兴趣(除非你想测试你的解决方案)。当然,您不应该尝试在生成样本数组的方法中编写解决问题的代码

    如果你想要一个随机排序的列表,Collections.shuffle会帮你处理。如果想要一个没有单个元素的列表,只需生成一个包含所有元素的列表1。。n,然后删除随机选择的数字(然后洗牌)。发电机就这样了。至于解决方案,有很多方法,有人已经建议使用求和,这是一个完全有效的解决方案