情景:
用户应该输入N(值的数量) 其次是N值。
如何输出中位数?
答案 0 :(得分:2)
我建议您手动编程二叉树。您可能需要允许重复,而内置TreeSet
的Java将无法执行。也可能是您可以在网络上的某处找到合适的树实现。树应该排序。有关更多灵感,请参阅Binary search tree on Wikipedia。
您的主程序将逐个读取您的数字并将它们插入您的树中。之后,如果N
是偶数,它将查询树中间元素或两个中间元素。
您不需要任何数组来实现您的树。为了找到第i个元素,树将执行一个inorder遍历计数遇到的元素并返回第i个元素。
快乐的编码。
答案 1 :(得分:2)
没有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);
}
(不要注意.sorted()
幕后的那个男人。)
答案 2 :(得分:0)
你肯定需要一些存储空间至少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..