给定一个整数数组,我们必须回答某些查询,其中每个查询都有2个整数。这2个整数是给定数组的2个指数,我们必须找到2个指数之间存在的数字的中位数(包括给定的指数)。
为每个查询排序数组是最基本的解决方案。这可以通过分段树或范围查询来解决吗?
答案 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]))