zoukankan      html  css  js  c++  java
  • 平均值、中值查询(转)

    #谷歌面试题#http://blog.sina.com.cn/s/blog_979956cc0101hd0f.html

    给你一个数组,它有N个8-bit整数, (比如,从0到255), 和M个子数组,[i, j] (每个子数组由两个下标 i 和 j 确定,0 <= i <= j < N)。对每个子数组,找到平均值和中值

    分析:假设仅需要求一个子数组,则我们可以在线性时间内求出平均值和中值。

    case 1:M很小,则可以用M次brute-force算法求出,时间复杂度O(M*N),空间复杂度O(1)

    case 2:  M很大,N较小, M >> N^2,则可以预处理,用O(N^2)的空间存储所有M个子数组可能的结果,预处理时间O(N^2),M次查询时间为O(M)

    case 3:  N较大时,

    1) 平均值:计算累加和sum[i] 为从0到i的求和,则mean(i, j) = sum(i, j) / (j - i + 1) = ( sum[j] - sum[i-1]) / (j - i + 1), 预处理时间O(N),空间O(N),M次查询时间O(M)

    2)中值:与平均值类似,计算累加的统计频数,c[i][ ]为从0到i这i+1个值在0~255上的分别出现次数的数组,利用c[j][ ] - c[i-1][ ]即可求出[i, j]之间所有数在0~255上出现的频数数组,根据这个数组可在O(256)时间内求出中值, 预处理时间O(N),空间O(N),M次查询时间O(M)

    用到等式S[I --J]=S[J] –S[I];

  • 相关阅读:
    jboss hello world
    jboss 7 启动问题
    jboss [how to access the admin console]
    tomee 消息持久化
    Python、C和Java对比
    编程语言产生时间表
    从关系型数据库到非关系型数据库
    约束和异常处理
    类与类之间的关系
    类的成员
  • 原文地址:https://www.cnblogs.com/cheng07045406/p/3231321.html
Copyright © 2011-2022 走看看