Algorithm 求给定数组索引范围的中值
给定一个整数数组,我们必须回答某些查询,其中每个查询有2个整数。这两个整数是给定数组的两个索引,我们必须找到两个索引(包括给定索引)之间的数字的中值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
对每个查询的数组进行良好排序是最基本的解决方案。这可以通过分段树或范围查询来解决吗?以下是如何在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]))