- 打印出最大和最小的数
- 打印出所有数的中位数
- 打印出第k小的数,k小于100
- 打印出所有数的平方和
- 打印出 N 个数的平均值
- 打印出大于平均值的数的百分比
- 将 N 个数按照升序打印
- 将 N 个数按照随机顺序打印
解答:
-
不用保存所有值,只需要保存一个目标值,每次输入的时候对比并替换目标值即可。
-
需要保存所有值,只有输入完成才能计算出来中位数的序号。如果 N 为奇数,返回第 (N+1)/2 个数,如果为偶数,返回第 N/2 个数。
-
不需要保存所有输入的值。初始化一个 k 大小的过滤数组,过滤数组不满时每次输入都往数组里添加新的元素,过滤数组满了之后,通过一个标志位(防止重复排序),排下序。后续每次输入的时候,对比输入值和过滤数组的最小值:
- 如果比过滤数组的最小值还要小,则弹出过滤数组中的最大值并将输入值插入过滤数组的末尾。
- 如果比过滤数组的最小值要大,再对比过滤数组的最大值:
- 若比过滤数组的最大值大,直接忽略
- 若比过滤数组的最大值小,弹出过滤数组的最大值,找到该元素的正确位置并插入
- 最后返回过滤数组的最大元素即可。
-
不需要保存所有输入的值。定义一个变量存储结果,输入的时候,计算输入值的平方,并和结果变量相加,更新结果变量,最后返回结果即可,
sum += val*val
-
不需要保存所有输入。一个变量存储和,一个变量存储输入的个数,
sum += val; avg = sum/count
-
需要保存所有输入。先计算出平均值,数组做排序,找出第一个大于平均值的数的位置,计算百分比返回。
-
需要保存。排序然后打印
-
需要保存,随机打印。如果输入的顺序也算随机顺序的话,直接打印即可,不需要保存。