有 Java 编程相关的问题?

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


共 (3) 个答案

  1. # 1 楼答案

    您肯定需要至少N/2个位置的存储空间。这是没有办法的

    在OP发布后编辑:

    学习编程方面的好课程,尤其是数据结构。您不能依赖Stackoverflow完成所有的开发人员职业生涯;-)。话虽如此,让我们给你一个起点:我在这里使用ArrayList:

    int n = ...; // get N from the user;
    List<Double> list = new ArrayList<Double>();
    for (int i=0; i<n; i++) {
        double element = ...; // get element from the user;
        list.add(element);
    }
    // Have the Java library sort the list for you
    Collections.sort(list);
    // now pick/compute the median from the sorted list
    // I'll leave that up to you..
    
  2. # 2 楼答案

    我建议你手工编写一个二叉树。您可能需要允许重复,因为Java的内置TreeSet不允许重复。也可能是您可以在网络的某个地方找到合适的树实现。这棵树应该分类。更多灵感请参见Binary search tree on Wikipedia

    你的主程序将一个接一个地读取你的数字,并将它们插入到你的树中。之后,它将在树中查询中间元素,如果N是偶数,则查询两个中间元素

    实现树不需要任何数组。为了查找第i个元素,树将执行按顺序遍历,计算遇到的元素并返回第i个元素

  3. # 3 楼答案

    没有Array,没有List,或任何其他Collection

        try (Scanner scanner = new Scanner(System.in)) {
            System.out.print("Number of numbers: ");
            int N = scanner.nextInt();
            System.out.printf("Enter the %d numbers: ", N);
            double median = IntStream.range(0, N)
                    .mapToDouble(i -> scanner.nextDouble())
                    .sorted()
                    .skip((N-1)/2)
                    .limit(2-N%2)
                    .average()
                    .getAsDouble();
            System.out.printf("The median is %f%n", median);
        }
    

    (不要理窗帘后面的那个人。)