Skip to content

Latest commit

 

History

History
28 lines (23 loc) · 2.21 KB

1134.md

File metadata and controls

28 lines (23 loc) · 2.21 KB

题目:过滤。以下哪些任务需要保存标准输入中的所有值?哪些可以被实现为一个过滤器且仅使用固定数量的变量和固定大小的数组(和 N 无关)?在每个问题中,输入都来自于标准输入且含有N个0到1的实数。

  1. 打印出最大和最小的数
  2. 打印出所有数的中位数
  3. 打印出第k小的数,k小于100
  4. 打印出所有数的平方和
  5. 打印出 N 个数的平均值
  6. 打印出大于平均值的数的百分比
  7. 将 N 个数按照升序打印
  8. 将 N 个数按照随机顺序打印

解答:

  1. 不用保存所有值,只需要保存一个目标值,每次输入的时候对比并替换目标值即可。

  2. 需要保存所有值,只有输入完成才能计算出来中位数的序号。如果 N 为奇数,返回第 (N+1)/2 个数,如果为偶数,返回第 N/2 个数。

  3. 不需要保存所有输入的值。初始化一个 k 大小的过滤数组,过滤数组不满时每次输入都往数组里添加新的元素,过滤数组满了之后,通过一个标志位(防止重复排序),排下序。后续每次输入的时候,对比输入值和过滤数组的最小值:

    • 如果比过滤数组的最小值还要小,则弹出过滤数组中的最大值并将输入值插入过滤数组的末尾。
    • 如果比过滤数组的最小值要大,再对比过滤数组的最大值:
      • 若比过滤数组的最大值大,直接忽略
      • 若比过滤数组的最大值小,弹出过滤数组的最大值,找到该元素的正确位置并插入
    • 最后返回过滤数组的最大元素即可。
  4. 不需要保存所有输入的值。定义一个变量存储结果,输入的时候,计算输入值的平方,并和结果变量相加,更新结果变量,最后返回结果即可,sum += val*val

  5. 不需要保存所有输入。一个变量存储和,一个变量存储输入的个数,sum += val; avg = sum/count

  6. 需要保存所有输入。先计算出平均值,数组做排序,找出第一个大于平均值的数的位置,计算百分比返回。

  7. 需要保存。排序然后打印

  8. 需要保存,随机打印。如果输入的顺序也算随机顺序的话,直接打印即可,不需要保存。