查找给定的数组索引范围的中位数

时间:2016-10-17 04:38:57

标签: algorithm median

给定一个整数数组,我们必须回答某些查询,其中每个查询都有2个整数。这2个整数是给定数组的2个指数,我们必须找到2个指数之间存在的数字的中位数(包括给定的指数)。

为每个查询排序数组是最基本的解决方案。这可以通过分段树或范围查询来解决吗?

1 个答案:

答案 0 :(得分:0)

以下是在Python中执行此操作的方法:

将numpy导入为np

def median(arr):

    arr_sort = sorted(arr)
    n = len(arr)
    n_over_two = int(n/2)
    if (n%2 == 0):
        return (arr_sort[n_over_two-1]+arr_sort[n_over_two])/2.0
    else:
        return arr_sort[n_over_two]

tmp = [5,4,3,2,1]
print(median(tmp))

tmp = [2,10,2,10,7]
print(median(tmp))

tmp = [4, 3, 2, 1]
print(median(tmp))

这适用于任何阵列。取一个数组子集的中位数只涉及python中该数组的标准索引(包括较低的索引,不包括上限 - 如果你想包含upper,加一个):

anArray=[0,0,0,1,2,3,4,10,10,10,10]
print(anArray[3:7])
print(median(anArray[3:7]))