Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 求给定数组索引范围的中值_Algorithm_Median - Fatal编程技术网

Algorithm 求给定数组索引范围的中值

Algorithm 求给定数组索引范围的中值,algorithm,median,Algorithm,Median,给定一个整数数组,我们必须回答某些查询,其中每个查询有2个整数。这两个整数是给定数组的两个索引,我们必须找到两个索引(包括给定索引)之间的数字的中值 对每个查询的数组进行良好排序是最基本的解决方案。这可以通过分段树或范围查询来解决吗?以下是如何在Python中实现这一点: 将numpy作为np导入 def median(arr): arr_sort = sorted(arr) n = len(arr) n_over_two = int(n/2) if (n%2

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


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

以下是如何在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中该数组的标准索引(包括较低的索引,不包括较高的索引-如果要包括较高的索引,请添加一个):


我想不出有什么比蛮力解决方案更复杂的了,蛮力解决方案涉及对每个查询的数组进行排序。因此,目前我没有任何代码片段。对于所有投票否决该问题的用户,你能告诉我这样做的原因吗,因为我无法理解它的错误。上述暴力解决方案的时间复杂度不是最优的。您是否有任何与范围查询相关的想法,以提高时间复杂性。
anArray=[0,0,0,1,2,3,4,10,10,10,10]
print(anArray[3:7])
print(median(anArray[3:7]))