将一个有5个元素的数组中的值(整数)按逆序重新存放。_如何用堆计算整数流的中位数...

(给ImportNew加星标,提高Java技能)

编译:ImportNew/覃佑桦

www.baeldung.com/java-stream-integers-median-using-heap

1.概述

本文介绍了如何查找整数流的中位数。

我会通过示例说明问题,分析问题,最后给出几种Java解决方案。

2.问题描述

中位数(又称中值)指一个有序数据集的中间值。对于一组整数,小于中位数的元素与大于中位数的元素一样多。

在一组有序数据集中:

  • 如果元素个数为奇数,那么中间那个元素是中位数:在有序整数集合{5,7,10}中,中位数是7;

  • 如果元素个数为偶数,没有中间元素,那么中位数为两个中间元素的平均值:在有序整数集合{5,7,8,10}中,中位数为 (7+8)/ 2 = 7.5。

现在,假设输入是数据流而非一个有限集合。可以把整数流的中位数定义为,到目前为止已读取整数集合的中位数。

问题可以形式化描述为:对于给定的整数流输入,设计一个类,为读取的每个整数执行下面两个任务:

  1. 将整数添加到整数集

  2. 查找目前为止已读取整数集合的中位数

例如:

add 5         // sorted-set = { 5 }, size = 1
中位数 -> 5

add 7 // sorted-set = { 5, 7 }, size = 2
中位数 -> (5 + 7) / 2 = 6

add 10 // sorted-set = { 5, 7, 10 }, size = 3
中位数 -> 7

add 8 // sorted-set = { 5, 7, 8, 10 }, size = 4
中位数 -> (7 + 8) / 2 = 7.5
..

尽管输入的整数流是无限的,但我们假设可以把数据流中的所有元素一次存到内存中。

可以将任务用下面的代码表示:

void add(int num);

double getMedian();

3.朴素方法

3.1.有序列表

让我们从一个简单的想法开始:通过照索引访问列表的中间元素或者中间两个元素,计算整数有序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 调用函数结构程序题: 1.1 比较两个数,输出最大者 1.2 输入两个实数,用一个函数求出他们之和 1.3 递推方法求n! 1.4 有两个班级,分别有35名和30名学生,调用函数,分别求这两个班的平均 1.5 用选择法对数组中的10个整数按由小到大排序 1.6 有一个3*4的矩阵,求所以=有元素中的最大 1.7 有一个数,内放10个数,不用全局变量求出最大,最小,和平均。 1.8 用调用函数求最大公约数和最小公倍数。两个整数由键盘输入 1.9 写出一个判素数的函数,在主函数输入一个整数,输出是否为素数的信息 1.10 用调用函数求水仙花数 1.11 用调用函数将3*3的二维数组行和列互换 1.12 对10个数由小到大排序,用函数调用冒泡法 2 数组结构程序题: 2.1 求Fibonacci(斐波那契)数列的前40个数 2.2 用数组来处理求Fibonacci 数列问题 2.3 将一个二维数组行和列的元素互换,存到另一个二维数组中 2.4 求一个3*3的矩阵的对角线之和 2.5 将一个数组中逆序重新存放,例如:原来顺序为8,6,5,4,1.要求改为1,4,5,6,8.注:考虑偶数或奇数时怎么交换 2.6 输入十个数,去掉最大数和最小数后求平均 2.7输入六个数到数列中,再输入一数,如果与该数相同数组的元素相同时,则输出其下标,否则,输出“-1” 2.8降序排列十个数 2.9 求一个二维数组的最大和最小 2.10 求一个4*4矩阵所有元素的和 3 循环结构程序题 3.1 输入一个大于3的整数n,判断它是否为素数(素数又称质数,就是除了能被1和它本身整除之外,不能被其它自然数整除的自然数) 3.2 输入两个数,求最大公约数和最大公倍数 3.3输入一行字符,输出其英文字母,空格,数字,和其它字符的个数 3.4 2+22+222+2222+2222,位数和数自己输入 3.5“水仙花数”是一个三位数其各位数字的立方和等于该数本身 3.6 有一个分数序列 2/1,3/2,5/3,8/5,13/8,21/13,......求出这个序列数的前20项之和 3.7 计算1-3+5-7+.....-99+101的 3.8 求n!的 3.9 .判断一个数是否为素数? 3.10 输出九九乘法表

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值